我可以从 Application#onCreate() 启动服务吗?

18

我希望当我的应用程序从任何组件初始化时启动服务。

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

服务是否在onCreate()状态下可用?super.onCreate()会初始化在AndroidManifest.xml中注册的应用程序的所有组件吗?

我可以在我的Galaxy S上运行此代码,但我无法确定它是否会在所有设备和平台上运行,我找不到有关Android应用程序初始化的任何文档。


在这种情况下,我们如何在 Application 中获取 Service 对象,并且 onBind 是从哪里调用的? - Amit
2个回答

10

是的,您可以按照您当前所做的方式在onCreate()中启动服务。但并不能保证服务一定会成功启动 - 只要设备上存在该服务并且可以运行,它就会启动。 super.onCreate()不会为从应用程序中启动服务做任何必要的准备工作。您所说的“服务在onCreate()状态下是否可用”是什么意思?


该服务来自我的应用程序,因此它肯定存在。通过“在onCreate()状态中服务是否可用”,我指的是Service是否准备好在Application#onCreate()中启动(而不是Activity#onCreate())。 - Cedric Fung
1
服务将准备好启动。onCreate 在服务可用于启动之前不需要运行(即 onCreate 不执行加载您的应用程序中的服务所需的类加载)。 - Rajiv Makhijani

1

简而言之,是的,Context.startService(),但文档也指出,如果返回null,则表示服务不可用。

如果正在启动服务或服务已经在运行,则返回实际启动的服务的ComponentName;否则,如果服务不存在,则返回null

此API旨在在设备之间保持一致,因此您可以放心在模拟器和设备上体验。唯一的注意事项是记住需要“大量”资源的服务可能会以不同的方式运作,例如CPU时间或内存等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接