Android监听应用程序从前台切换至后台运行

    android本身没有提供监听应用程序从前台切换到后台的api,所以我们只能自己想办法来实现。我想到的办法是写一个BaseActivity在onStop里判断当前系统前台运行的应用程序是否是我们自己的应用程序来实现监听应用程序被切换到后台。然后我们的应用所有Activity都继承BaseActivity。下面我们来看具体实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class BaseActivity extends Activity {
private static boolean isRunInBackground;

@Override
protected void onStart() {
// TODO Auto-generated method stub
isRunInBackground = false;
super.onStart();
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
isRunInBackground = true;
super.onPause();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
if(isRunInBackground){
Toast.makeText(this, "应用程序处于后台运行中", Toast.LENGTH_SHORT).show();
}
super.onStop();
}

}

    声明一个静态的boolean变量isRunInBackground来标记应用程序是否处于后台运行。当我们从一个AActivity跳转到另一个BActivity时会先调用AActivity的onPause然后调用BActivity的onCreate、onStart、OnResume再调用AActivity的onStop,当从BActivity返回AActivity时会调用BActivity的onPause再调用AActivity的onResart、onStart、OnResume再调用BActivity的onStop、onDestroy。根据activity的生命周期,我们在onStart的时候将isRunInBackground设置为false,在onPause设置为true,在onStop里判断isRunInBackground是否处于后台运行。经测试可行。
    当然我们也可以不用isRunInBackground这个变量来判断,可以直接在onStop里通过获取当前系统前台应用程序的包名跟自己应用程序的包名进行对比来判断。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void onStop() {
// TODO Auto-generated method stub
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List rti = mActivityManager.getRunningTasks(1);
RunningTaskInfo info = rti.get(0);
String packageName = info.topActivity.getPackageName();
if(!packageName.equals(getApplicationInfo().packageName)){
Toast.makeText(this, "应用程序处于后台运行中", Toast.LENGTH_SHORT).show();
}
super.onStop();
}

    这种办法也可以实现对应用程序切换到后台的监听。
    好了就介绍到这里,如果你有更好的实现办法请在博客下面留言大家一起交流。

坚持原创技术分享,您的支持将鼓励我继续创作!