2010-09-25 82 views
2

我是一个初学者,他做了一个简单的程序来展示服务如何工作。为什么不调用onServiceConnected?

..... 
toStartService = new Intent(this, SimpleService.class); 
    sc = new ServiceConnection() {    
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      Toast.makeText(MoreService.this, "SC: Binded", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      Toast.makeText(MoreService.this, "SC: Unbinded", Toast.LENGTH_SHORT).show(); 
     }  
    }; 


    startService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(MoreService.this, "Starting Service", Toast.LENGTH_SHORT).show(); 
      startService(toStartService);   
     } 
    }); 

    stopService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      stopService(toStartService); 
     } 
    }); 

    bindService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if((isBound = bindService(toStartService, sc, BIND_AUTO_CREATE))) { 

      } 
     } 
    }); 

    unbindService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(isBound) { 
       unbindService(sc); 
       isBound = false; 
      } 
     } 
    }); 

} 

为什么没有通过sc变量(在bindService())上调用sc.onServiceConnected()方法? 代码有什么问题?

我遇到了这个以下条件:

  • 当我按下[startService]的 服务就开始了,然后 [stopService]服务采空井。

  • 当我按[startService]然后[bindService]什么也不做,[unbindService]都没有。

  • 当我按[bindService],它创建了服务,[stopService]没有工作。我按[unbindService]该服务正在调用onDestroy()方法。

为什么bindbin创建的服务在unbinded时被销毁?我尝试用startService启动服务,但无法绑定。

阿瑞帮助我,对不起,如果我错了。

+0

我有完全相同的问题。现在我明白了为什么很多人讨厌Java ...... 无论如何,当你说“代码有什么问题”时要非常小心,因为在这个网站上有数百万假装“态度警察”,除了回答投票问题像你的。 – 2013-03-16 22:43:24

回答

2

这是所有这些方法的设计行为。例如,在根据the documentationbindService(Intent service, ServiceConnection conn, int flags)方法,服务将仅只要主叫上下文存在运行:

该服务将被认为是本系统只只要调用上下文存在需要。例如,如果此Context是一个已停止的Activity,则该服务将不需要继续运行,直到活动恢复。

对于unbindService (ServiceConnection conn)的文件说:从应用服务

断开。随着服务重新启动,您将不再接收呼叫,现在可以随时停止服务。

startService (Intent service) documentation它说:

使用startService()覆盖了由bindService(Intent, ServiceConnection, int)管理默认的使用寿命:它要求服务保持运行,直到stopService(Intent)叫,不管任何的客户端是否连接到它。请注意,拨打startService()的呼叫不是嵌套:无论您拨打startService()多少次,只需致电stopService(Intent)即可停止。

+0

谢谢,“只要调用上下文存在,服务就会运行”,那么我如何绑定到已经运行的服务? – 2010-09-25 04:00:33

+0

如果服务是由'startService'启动的,那么您可以绑定到它,并且在解除绑定后它将保持运行,但如果它是由'bindService'启动的,那么只要调用上下文存在,它就会保持运行。 – Brian 2010-09-25 04:06:25

+0

噢,我只是在服务的onBind方法中插入mBinder,然后ServiceConnection正在工作!为什么它可以是这样的? – 2010-09-25 06:27:25