在调用 startService 后立即到达实例
Reaching the instance right after the call to startService
我有以下代码:
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
后,它始终 returns 为空。我从 main activity 的构造函数中调用它。
如何让构造函数从第一次调用就到达实例?
启动服务的正确方法是使用意图。在您的主 activity 中,创建一个意图并使用该意图调用 this.startService
。
您可能不应该保留任何东西的静态实例,更不用说服务了。 Singleton 是 Android 中需要警惕的模式,因为您的应用程序上下文会被 OS 杀死并重新创建,因此无法知道静态字段是否仍然存在。
考虑到 Android
中 Services
的概念,我确信 startService()
的实现涉及异步操作。因此,到 startService()
returns 时,系统甚至可能不会调用 onCreate()
方法。这就是为什么 createInstance()
总是 returns null
.
我强烈建议根据 official documentation.
使用 Services
而不是单例模式
我有以下代码:
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
后,它始终 returns 为空。我从 main activity 的构造函数中调用它。
如何让构造函数从第一次调用就到达实例?
启动服务的正确方法是使用意图。在您的主 activity 中,创建一个意图并使用该意图调用 this.startService
。
您可能不应该保留任何东西的静态实例,更不用说服务了。 Singleton 是 Android 中需要警惕的模式,因为您的应用程序上下文会被 OS 杀死并重新创建,因此无法知道静态字段是否仍然存在。
考虑到 Android
中 Services
的概念,我确信 startService()
的实现涉及异步操作。因此,到 startService()
returns 时,系统甚至可能不会调用 onCreate()
方法。这就是为什么 createInstance()
总是 returns null
.
我强烈建议根据 official documentation.
使用Services
而不是单例模式