Автогенерация неправильного конструктора IntentService по умолчанию - PullRequest
0 голосов
/ 28 октября 2018

Android Studio имеет полезный ярлык для автоматического создания необходимых конструкторов и переопределения методов (alt + enter).

Для IntentService Android Studio автоматически создает конструктор по умолчанию, который показывает ошибку в AndroidManifest.xml.

public class MyIntentService extends IntentService {

//  Auto-generated by IDE
    public MyIntentService(String name) { super(name); }

//  This is the correct default constructor!
//  public MyIntentService() { super("MyIntentService"); }

    @Override
    protected void onHandleIntent(@androidx.annotation.Nullable Intent intent) {
        ...
    }

}

Ошибка в AndroidManifest.xml:

'... MyIntentService' не имеет конструктора по умолчанию

Я понимаю, как это исправить вручную, но почему в IDE создается неправильный конструктор? Это ошибка? Есть ли способ исправить это в IDE?

1 Ответ

0 голосов
/ 28 октября 2018

Это случайно.Я не считаю это ошибкой.

IntentService - это абстрактный класс с одним конструктором, IntentService(String).Предполагаемое использование заключается в том, что реализующий конструктор подкласса вызывает его, предоставляя имя, которое полезно для отладки.

С другой стороны, Android Service s должен иметь конструктор без аргументов, чтобы инфраструктура могла их создавать.Это также относится к IntentService с.

В среде IDE ничего не известно, в частности, о IntentService.Он просто видит конструктор с аргументом String и предлагает создать совместимый конструктор подкласса.Другой инструмент Android Lint позже обнаруживает, что в манифесте объявлен Service, который не имеет конструктора без аргументов, и выдает предупреждение.

Обратите внимание, что с текущими ограничениями на выполнение фона, вам, вероятно, лучшеиспользуя другие механизмы, такие как JobIntentService вместо IntentService.

...