Android App前后台切换的监听

简述:  

   项目中有时候需要用到前换台切换时的监听,比如,App从后台进入前台需要加载手势密码页面等。那么这个时候就需要我们处理这种需求。首先我们先来思考一个问题:在Activity的生命周期中提供了onStart()和onResume()、onPause()和onStop()方法,他们的区别好像不太大,那么为什么还要提供这么两对儿方法呢?其实我们可以从这个角度来回答这个问题,onStart()和onStop()是从Activity是否可见来回调,onResume()和onPause()是从Activity是否位于前台的回调的。

方案:

  实现的大体思路:在Activity生命周期中的onPause()中判断是否进入后台,如果进入后台你就可以做一些你想要做的操作,Activity生命周期中的OnResume()方法中判断App是否进入前台,如果进入前台就做自己想要的操作。

具体实现:

   当然这个Activity最好选择BaseActivity然后再让其他的Activity继承它。下面我以BaseActivity为例写下相关代码:

public class BaseActivity extends Activity {
	public boolean isForeground = false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
	}

	@Override
	protected void onResume() {
		super.onResume();
		/**
		 * 在这里本来可以使用if (!isAppOnForeground()) {//to do
		 * sth},但为了避免再次调用isAppOnForeground()而造成费时且增大系统的开销,故在这里我应用了一个标志位来判断
		 */
		if (isForeground == false) {
			Toast.makeText(BaseActivity.this, Constant.FOREGROUND_INFO,
					Toast.LENGTH_SHORT).show();
			isForeground = true;
		}
	}

	@Override
	protected void onPause() {
		super.onPause();
		if (!isAppOnForeground()) {
			isForeground = false;
			Toast.makeText(BaseActivity.this, Constant.BACKGROUND_INFO,
					Toast.LENGTH_SHORT).show();
		}
	}

	/**
	 * 程序是否在前台运行
	 * 
	 * @return
	 */
	public boolean isAppOnForeground() {

		ActivityManager activityManager = (ActivityManager) getApplicationContext()
				.getSystemService(Context.ACTIVITY_SERVICE);
		String packageName = getApplicationContext().getPackageName();
		/**
		 * 获取Android设备中所有正在运行的App
		 */
		List<RunningAppProcessInfo> appProcesses = activityManager
				.getRunningAppProcesses();
		if (appProcesses == null)
			return false;

		for (RunningAppProcessInfo appProcess : appProcesses) {
			// The name of the process that this object is associated with.
			if (appProcess.processName.equals(packageName)
					&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
				return true;
			}
		}

		return false;
	}
}

测试Demo的源码下载:App前后台切换的监听源码


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值