自动生成不正确的 IntentService 默认构造函数

Auto-generating Incorrect IntentService Default Constructor

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' has no default constructor

我知道如何手动更正它,但为什么 IDE 创建了错误的构造函数?这是一个错误吗?有没有办法在 IDE?

中更正此问题?

纯属巧合。我不认为这是一个错误。

IntentService 是一个抽象 class,只有一个构造函数 IntentService(String)。预期用途是实现 subclass 构造函数调用它提供一个对调试有用的名称。

另一方面,Android Services 必须有一个无参数的构造函数,以便框架可以实例化它们。它也适用于 IntentServices.

IDE 对 IntentService 一无所知。它只看到一个带有 String 参数的构造函数,并提供生成一个兼容的 subclass 构造函数。另一个工具 Android Lint 后来检测到清单中声明的​​ Service 没有无参数构造函数并发出警告。

请注意,由于当前的后台执行限制,您最好使用其他机制,例如 JobIntentService 而不是 IntentService