在调用startService之后立即到达实例

时间:2015-04-11 13:30:18

标签: android android-service

我有以下代码:

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。我从主要活动的构造函数中调用它。 如何让构造函数从第一次调用到达实例?

2 个答案:

答案 0 :(得分:0)

启动服务的正确方法是使用intent。在您的主要活动中,创建一个意图并使用该意图调用this.startService

你可能不应该保留任何东西的静态实例,更不用说服务了。 Singleton是一种在Android中需要警惕的模式,因为操作系统会杀死并重新创建应用程序上下文,因此无法知道静态字段是否仍然存在。

答案 1 :(得分:0)

考虑ServicesAndroid的概念,我确信startService()的实现涉及异步操作。因此,在startService()返回时,onCreate()方法可能甚至不被系统调用。这就是createInstance()始终返回null的原因。

我强烈建议您根据official documentation使用Services而不是单身模式。