锁屏清理进程(广播接受者)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wdx_1136346879/article/details/85642096
  1. #锁屏清理进程# (重点)

{如以前的搜狗手机输入法,在锁屏以后进程没有清理还在进行定位相当耗电,(现在有那种检测软件耗电,流量情况就知道是你的软件在搞鬼),所以你懂得!}

锁屏和解锁的广播接受者是不能在清单文件中注册的,必须使用代码进行注册,避免一些恶意程序的骚扰

1.隐藏系统进程
	a.创建一个boolean变量,表示是否隐藏系统进程
		//是否显示系统进程
		private boolean isShowSystem = true;
	b.在Myadapter的getCount方法进行判断
		@Override
		public int getCount() {
			//方便我们从不同的集合中拿出数据
			return isShowSystem == true ? userAppInfos.size()+1+systemAppInfos.size()+1 : userAppInfos.size()+1;
		}
	c.在设置的点击事件中更改boolean变量的值
		/**
		 * 设置
		 * @param v
		 */
		public void setting(View v){
			//true改为false   false改为true
			isShowSystem = !isShowSystem;
			//更新界面
			myAdapter.notifyDataSetChanged();
		}
2.锁屏清理进程
	a.在服务中创建一个广播接受者
		private class ScreenOffReceiver extends BroadcastReceiver{

			@Override
			public void onReceive(Context context, Intent intent) {
				killprocess();
				//停止更新widgets
				stopupdate();
			}
		}
	b.在Oncreate方法中注册广播接受者
		//注册锁屏的广播接受者
		screenOffReceiver = new ScreenOffReceiver();
		//设置过滤条件
		IntentFilter screenoffintentfilter = new IntentFilter();
		screenoffintentfilter.addAction(Intent.ACTION_SCREEN_OFF);
		//注册广播接受者
		registerReceiver(screenOffReceiver, screenoffintentfilter);
	c.在ondestory方法中注销广播接受者
		//注销锁屏的广播接受者
		if (screenOffReceiver != null) {
			unregisterReceiver(screenOffReceiver);
			screenOffReceiver = null;
		}
	d.在广播接受者的onreceive方法执行操作
		@Override
		public void onReceive(Context context, Intent intent) {
			killprocess();
			//停止更新widgets
			stopupdate();
		}
3.解锁开启更新的操作
	
	a.在服务中创建一个广播接受者
		private class ScreenOnReceiver extends BroadcastReceiver{

			@Override
			public void onReceive(Context context, Intent intent) {
				updatesWidgets();
			}
		}
	b.在Oncreate方法中注册广播接受者
		//注册解锁的广播接受者
		screenOnReceiver = new ScreenOnReceiver();
		//设置过滤条件
		IntentFilter screenonintentfilter = new IntentFilter();
		screenonintentfilter.addAction(Intent.ACTION_SCREEN_ON);
		//注册广播接受者
		registerReceiver(screenOnReceiver, screenonintentfilter);
	c.在ondestory方法中注销广播接受者
		//注销解锁的广播接受者
		if (screenOnReceiver != null) {
			unregisterReceiver(screenOnReceiver);
			screenOnReceiver = null;
		}
	d.在广播接受者的onreceive方法执行操作
		@Override
		public void onReceive(Context context, Intent intent) {
			updatesWidgets();
		}

#widgets的bug的处理#
bug : 用户从设置中心关闭服务,造成widgets无法更新的问题
updatePeriodMillis 更新时间到了之后就会去调用onUpdate方法
处理方式:将开启服务的操作移植到onUpdate方法

猜你喜欢

转载自blog.csdn.net/wdx_1136346879/article/details/85642096