我正在通过调用来自每个Activity的onResume()和来自onPause()的minusActivity()的plusActivity()来跟踪我的应用程序中当前可见的活动数量(应该是0或1)
plus/minusActivity在我的myApplication类中,它扩展了Application.
方法递增和递减计数器.每次调用minusActivity()时,它都会发布一个在2秒后运行的runnable.当runnable执行时,如果另一个活动在2秒前关闭的最后一个活动之后没有打开(例如foregroundedActivities == 0因为没有在2秒内调用plusActivity()),那么它调用一个方法来做一些需要发生的事情当背景.
这是一个片段:
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();
}
};
Run Code Online (Sandbox Code Playgroud)
鉴于此过程运行的时间范围为2秒,并且不涉及对Activity的回调,是否可以接受完成后台检测的方法,或者我是否真的需要使用服务执行所有这些操作?这似乎是很多开销,我看不到任何好处,因为这似乎工作正常.
你的解决方案可能有效,但我不知道。
您也许可以使用BroadcastReceiver。如果您使用 BroadcastReceiver,则可以在活动执行 onPause() 时发出 Intent 以及加号/减号代码。BroadcastReceiver 将能够再次执行您的应用程序...