Intent Service - производный вызов, явный конструктор суперкласса

1

Я изучаю Android и натыкаюсь на пример вроде

public static class A extends IntentService {
    public A() {
        super("AppWidget$A");
    }
}

Может кто-нибудь, пожалуйста, скажите мне, почему мы должны явно вызвать конструктор суперкласса (IntentService)? и что означает строка параметра?

Теги:
android-intent
android-widget

2 ответа

3
Лучший ответ

Он используется только для отладки. Вот часть исходного кода IntentService, который использует это:

public abstract class IntentService extends Service {

    ...
    private String mName;
    ...

    /**
     * Creates an IntentService.  Invoked by your subclass constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public IntentService(String name) {
        super();
        mName = name;
    }

    ...

    @Override
    public void onCreate() {
        super.onCreate();
        HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
        thread.start();

        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);
    }

    ...
}
  • 0
    Не могли бы вы немного объяснить код onCreate и нужно ли передавать параметр в форме <вызывающий класс> $ <рабочий класс> или это просто соглашение?
  • 1
    @deXter: я объясню только в отношении использования mName . Как вы видите, он используется для создания имени в потоке обработчика (есть конструктор Thread, который принимает имя). Это полезно только в том случае, если вам нужно записать, какой поток запущен сейчас. Так что где-то внутри Android использует это для удобной регистрации. По сути, здесь происходит подготовка к выполнению полезной нагрузки IntentService в фоновом потоке без пользовательского интерфейса.
Показать ещё 2 комментария
0

IntentService имеет единственный конструктор, который принимает строковый аргумент "имя". Я обнаружил, что его единственным использованием является именование рабочего потока для IntentService. Этот поток называется IntentService [name].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню