将服务绑定放在onStart()上是不是很糟糕?

时间:2014-08-19 03:50:11

标签: java android service binding bind

我在这里有两项活动。 他们每个人都会与我尝试与结合的单个服务进行互动。

是不是如果我在每个活动的每个 onStart()方法中加入绑定代码?

protected void onStart() {
  super.onStart();
  if(playIntent==null){
    playIntent = new Intent(this, MusicService.class);
    bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE);
    startService(playIntent);
  }
}

如果来自活动 - A ,我会转到活动 - B ,然后按“返回”按钮? 会没关系,因为Android会再次调用 onStart()方法, 这意味着再次重新绑定它?

从同一个Activity重新绑定两次是不好的做法还是什么?

我对活动过程的参考是from here.

1 个答案:

答案 0 :(得分:3)

这是我在Android开发者网站上发现的:

  1. 您通常应该在匹配期间配对绑定和解除绑定 提出和         消除客户生命周期的瞬间。

    例如:

  2. 如果您只需要在活动期间与服务进行互动 可见,你应该在onStart()期间绑定并在解除期间解除绑定 的onStop()。

  3. 如果您希望自己的活动收到回复,即使它是 在后台停止,然后你可以在onCreate()和 在onDestroy()期间取消绑定。

    请注意,这意味着您的活动需要在其运行的整个过程中使用该服务(即使在后台),因此如果该服务在另一个过程中,那么您会增加该服务的权重过程,系统更有可能杀死它。

    注意:在活动的onResume()和onPause()期间,通常不应该绑定和解除绑定,因为这些回调在每个生命周期转换时发生,您应该保持发生的处理在这些过渡到最低限度。此外,如果应用程序中的多个活动绑定到同一服务,并且其中两个活动之间存在转换,则可以销毁该服务并在当前活动解除绑定(暂停期间)之前(下一个绑定期间)(恢复期间)重新创建该服务。