2011-03-31 52 views
5

我正在通过从每个Activity的onResume()和来自onPause()的minusActivity()调用plusActivity()来跟踪当前在我的应用程序(应该是0或1)中可见的活动数Android应用程序背景的简单检查

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(); 
    } 

}; 

鉴于此过程中工作在2秒的时间内,这一个活动没有回调都参与其中,为它实现后台检测一种可接受的方式,还是我真的需要使用服务完成所有这些工作?这似乎有很多开销,我看不到任何好处,因为这似乎工作正常。

回答

1

您的解决方案可能工作,但我不知道。

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