Я изучаю Android и натыкаюсь на пример вроде
public static class A extends IntentService {
public A() {
super("AppWidget$A");
}
}
Может кто-нибудь, пожалуйста, скажите мне, почему мы должны явно вызвать конструктор суперкласса (IntentService)? и что означает строка параметра?
Он используется только для отладки. Вот часть исходного кода 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);
}
...
}
IntentService имеет единственный конструктор, который принимает строковый аргумент "имя". Я обнаружил, что его единственным использованием является именование рабочего потока для IntentService. Этот поток называется IntentService [name].
mName
. Как вы видите, он используется для создания имени в потоке обработчика (есть конструктор Thread, который принимает имя). Это полезно только в том случае, если вам нужно записать, какой поток запущен сейчас. Так что где-то внутри Android использует это для удобной регистрации. По сути, здесь происходит подготовка к выполнению полезной нагрузки IntentService в фоновом потоке без пользовательского интерфейса.