我有以下代码:
Class A extends Service{
static instance = null;
onCreate(){
instance = this;
}
public static createInstance(Context context){
if(instance==null)
context.startService(new Intent(context, A.class));
return instance;
}
第一次调用createInstance
后,它始终返回null。我从主要活动的构造函数中调用它。
如何让构造函数从第一次调用到达实例?
答案 0 :(得分:0)
启动服务的正确方法是使用intent。在您的主要活动中,创建一个意图并使用该意图调用this.startService
。
你可能不应该保留任何东西的静态实例,更不用说服务了。 Singleton是一种在Android中需要警惕的模式,因为操作系统会杀死并重新创建应用程序上下文,因此无法知道静态字段是否仍然存在。
答案 1 :(得分:0)
考虑Services
中Android
的概念,我确信startService()
的实现涉及异步操作。因此,在startService()
返回时,onCreate()
方法可能甚至不被系统调用。这就是createInstance()
始终返回null
的原因。
我强烈建议您根据official documentation使用Services
而不是单身模式。