从应用程序类启动服务

时间:2012-09-12 05:55:45

标签: android

  

可能重复:
  Can I startService from Application#onCreate()?

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

我想在应用程序启动时启动服务。因此,我可以使用我的应用程序类而不是从启动活动启动服务吗?感谢。

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

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


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

2 个答案:

答案 0 :(得分:22)

是的,您可以在API Label 26之前执行此操作,但不能再这样做了。

如果您的API版本低于26

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

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

适用于API标签26及以上

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

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

所以,现在,您无法从Application启动后台服务。只有GUI组件才能启动后台服务。

或者,您可以从Application等后台组件启动前台服务。

答案 1 :(得分:-2)

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

Intent serviceIntent = new Intent();
serviceIntent.setAction("packagename.serviceName");
context.startService(serviceIntent);