8

可能重复:
我可以从 Application#onCreate() 开始服务吗?

我们可以从应用程序类启动一个服务吗?

我想在我的应用程序启动时启动一项服务。因此,我可以使用我的应用程序类来代替从启动活动启动服务吗?谢谢。

我尝试的是内部应用程序类:

public void onCreate() {
    super.onCreate();


    Log.i("Logger", "Service Starting");
    Intent errorLoggerService = new Intent(getApplicationContext(),
            ErrorLoggerService.class);
    getApplicationContext().startService(errorLoggerService);
}
4

2 回答 2

28

是的,您可以在 API 标签 26 之前执行此操作,但现在不行了。

如果您的 API 版本低于 26

public class MyApplication extends Application {
    public void onCreate() {
        super.onCreate();
        startService(new Intent(this, MyService.class));
    }
}

编辑 不要调用 getApplicationContext(),只需调用 startService()。此外,请确保您已在清单中声明了该服务。

API 标签 26 及以上

编辑 2 来自官方谷歌文档:https ://developer.android.com/guide/components/services.html#StartingAService

注意:如果您的应用程序以 API 级别 26 或更高级别为目标,系统会限制使用或创建后台服务,除非应用程序本身位于前台。如果应用需要创建前台服务,应用应该调用 startForegroundService()。该方法创建了一个后台服务,但该方法向系统发出信号,该服务将把自己提升到前台。创建服务后,服务必须在五秒内调用其 startForeground() 方法。

因此,这些天来,您无法从 Application 启动后台服务。只有 GUI 组件能够启动后台服务。

或者,您可以从应用程序等后台组件启动前台服务。

于 2012-09-12T06:35:43.220 回答
-3

是的,您可以使用 Intent 启动您的服务,

Intent serviceIntent = new Intent();
serviceIntent.setAction("packagename.serviceName");
context.startService(serviceIntent);    
于 2012-09-12T06:00:43.673 回答