2011-08-26 60 views
13

我想从任何组件初始化我的应用程序时启动服务。我可以从Application#onCreate()启动服务吗?

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

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

我可以在我的银河系统中运行此代码,但无法确定它将在所有设备和平台上运行,我找不到有关Android应用程序初始化的任何文档。

+0

在这种情况下我们如何才能将Service对象返回到Application ...以及从何处调用onBind? – aProgrammer

回答

8

是的,您可以按照您的方式启动onCreate()服务。不能保证服务能够成功启动 - 只要服务存在于设备上并且能够运行,它就会运行。 super.onCreate()不会进行任何准备,以便在您的应用程序内启动服务。 “在onCreate()状态下可用的服务”是什么意思?

+0

该服务来自我的应用程序,因此它肯定存在。通过“服务是否在onCreate()状态可用”,我的意思是服务是否已准备好在Application#onCreate()(而不是Activity#onCreate())中启动。 –

+1

服务即将开始。 onCreate不需要在服务可以启动之前运行(即,onCreate不会从您的应用程序加载服务所需的类加载)。 –

0

总之是的,Context.startService()但文件还说,如果它返回null服务不可用。

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

这个API并不意味着设备之间的不同,所以你可以在您遇到的仿真器和设备,你有什么信心。需要注意的是,需要“大量”资源的服务可能会采取不同的行为,例如cpu时间或内存等。

相关问题