我正在使用SDK编写SIP应用程序。我的应用程序有很多活动,所以我使用服务的onCreate和onDestroy方法初始化和关闭SDK,以便在应用程序期间(而不仅仅是单个活动)运行它。
我使用的示例应用程序调用了startService,然后只泄漏了服务--我不想这样做,但我不确定我是否有其他选择。
我想要做的是在活动基类的OnCreate方法中使用Context.BIND_AUTO_CREATE绑定到服务,在OnDestroy中取消绑定。我的所有活动都是从这一点出发的,因此,我将在我的所有活动中使用该服务。
但是,当配置更改或我切换活动时会发生什么呢?该服务是在活动之间的短暂时间内被猛烈地杀死,还是有保证它不会被杀死?如果是前者,这不是稍微削弱了服务的使用吗?我应该使用什么设计模式来使某些东西在我的应用程序的整个生命周期中持续存在?
发布于 2012-04-16 14:12:00
我意识到我问错了问题。我假设当用户完成应用程序时,应用程序就会被销毁,而它可能不会,它只是坐在后台,我的服务也是如此。我想我需要重新设计。
此外,如果我真的想继续走下去(我现在不这么做),我可以将服务绑定到我的应用程序,然后它就会在应用程序的整个生命周期内存在(正如我所记得的,除非用户杀死它或Android收回它,否则它将是无限期的)。在这种情况下,我不需要专门调用unbind,因为绑定将与应用程序一起销毁。
发布于 2012-04-16 06:13:48
在活动中,使用startService()启动服务,并绑定到服务。如果存在配置更改,这将使您的服务保持活动状态。
从活动的onDestroy()中的服务中解除绑定。服务将在您启动时仍然运行,而不仅仅是绑定到它。
在启动程序活动中保留一个静态计数器变量。在其onCreate()中为其他活动的启动增加1,在其onDestroy()中减少1。因此,如果已经打开了3个活动,并且假设您将其他2个活动保持在后台,则静态计数器为3个。现在,在每个onDestroy()中,减少计数器并检查它是否为零,停止服务。
在我的FirstActivity (Launcher)中,我有public static int counter = 0;
然后在每项活动中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirstActivity.counter++;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (--FirstActivity.counter == 0) {
stopService(new Intent(this, MyService.class));
}
}https://stackoverflow.com/questions/10169268
复制相似问题