我有一个应用程序,我在自定义Application类中为某个服务建立连接,以便所有活动都可以访问它,但是我需要在应用程序关闭后关闭服务。
我想只发送一次捆绑数据,而不是每次单个活动都点击onPause / Destroy()。
我也认为在Application类中的onTerminate()并不总是被调用。
有更好的方法吗?
答案 0 :(得分:3)
如果您的目标是API级别14或更高级别,则可以使用registerActivityLifecycleCallbacks注册侦听器并计算onActivityResumed和onActivityStopped中的启动/停止。当计数器为0时,您知道堆栈中没有其他活动,您可以关闭服务
答案 1 :(得分:1)
遗憾的是,没有回调/方法来检测您的应用程序进程何时停止或将要停止。 @Alex建议收听Activity生命周期回调可能比看起来更棘手。
但是如果你想仅仅为了停止运行Service
来检测这个问题,那么这个问题就没那么了,因为如果你的进程被追上了,那么它所拥有的所有正在运行的服务也会被停止! 强>
如果您想要在应用程序不在前台(完全不同的东西......)时停止服务,那么解决方案就不同了:
如果您始终在bindService()
活动回调中使用startService()
而不是onResume
,并且在onPause()
停止它,那么当您的应用进入后台时 - 该服务将自动停止。
另一种选择是使用服务回调来检测当前是否存在有界活动:
@Override
public IBinder onBind(Intent intent) {
mBoundedToActivity = true;
return mBinder;
}
@Override
public void onRebind(Intent intent) {
mBoundedToActivity = true;
super.onRebind(intent);
}
@Override
public boolean onUnbind(Intent intent) {
mBoundedToActivity = false;
return super.onUnbind(intent);
}