如何抓住申请的结尾?

时间:2014-02-19 08:42:20

标签: android

我有一个应用程序,我在自定义Application类中为某个服务建立连接,以便所有活动都可以访问它,但是我需要在应用程序关闭后关闭服务。

我想只发送一次捆绑数据,而不是每次单个活动都点击onPause / Destroy()。

我也认为在Application类中的onTerminate()并不总是被调用。

有更好的方法吗?

2 个答案:

答案 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);
}