我通过从每个 Activity 的 onResume() 调用 plusActivity() 和从 onPause() 调用 minusActivity() 来跟踪我的应用程序中当前可见的 Activity 数量(应该是 0 或 1)
plus/minusActivity 在我的 myApplication 类中,它扩展了 Application。
这些方法递增和递减计数器。每次调用 minusActivity() 时,它还会发布一个 2 秒后运行的可运行对象。当 runnable 执行时,如果在 2 秒前最后一个 Activity 关闭后另一个 Activity 没有打开(例如 foregroundedActivities == 0 因为在 2 秒内没有调用 plusActivity() ),那么它调用一个方法来做一些需要发生的事情背景时。
这是一个 fragment :
public void plusActivity(){
foregroundedActivities++;
}
public void minusActivity(){
foregroundedActivities--;
timingHandler.removeCallbacks(checkBackgroundTask);
timingHandler.postDelayed(checkBackgroundTask, 2000);
}
public void checkIfBackgrounded(){
if(foregroundedActivities==0){
doWhateverWeDoWhenBackgrounded();
}
}
public Runnable checkBackgroundTask=new Runnable(){
@Override
public void run() {
checkIfBackgrounded();
}
};
考虑到此过程运行的时间为 2 秒,并且不涉及对 Activity 的回调,这是完成后台检测的可接受方法,还是我真的需要使用服务来完成所有这些工作?这似乎有很多开销,而且我看不到任何好处,因为这似乎工作正常。
最佳答案
您的解决方案可能有效,但我不知道。
您可以使用 BroadcastReceiver .如果您使用 BroadcastReceiver,您可以在 Activity 执行 onPause() 时发出一个 Intent 以及您的加号/减号代码。 BroadcastReceiver 将能够再次执行您的应用程序...
关于android - Android应用程序后台的简单检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5506959/