#锁屏清理进程# (重点)
{如以前的搜狗手机输入法,在锁屏以后进程没有清理还在进行定位相当耗电,(现在有那种检测软件耗电,流量情况就知道是你的软件在搞鬼),所以你懂得!}
锁屏和解锁的广播接受者是不能在清单文件中注册的,必须使用代码进行注册,避免一些恶意程序的骚扰
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方法