我们可以从应用程序类启动服务吗?
我想在应用程序启动时启动服务。因此,我可以使用我的应用程序类而不是从启动活动启动服务吗?感谢。
我尝试过的是内部应用程序类:
public void onCreate() {
super.onCreate();
Log.i("Logger", "Service Starting");
Intent errorLoggerService = new Intent(getApplicationContext(),
ErrorLoggerService.class);
getApplicationContext().startService(errorLoggerService);
}
答案 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);