简单检查Android应用程序后台

Cap*_*mmo 5 android

我正在通过调用来自每个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的回调,是否可以接受完成后台检测的方法,或者我是否真的需要使用服务执行所有这些操作?这似乎是很多开销,我看不到任何好处,因为这似乎工作正常.

Eth*_*han 1

你的解决方案可能有效,但我不知道。

您也许可以使用BroadcastReceiver。如果您使用 BroadcastReceiver,则可以在活动执行 onPause() 时发出 Intent 以及加号/减号代码。BroadcastReceiver 将能够再次执行您的应用程序...