鎖屏清理程序(廣播接受者)
阿新 • • 發佈:2019-01-09
- #鎖屏清理程序# (重點)
{如以前的搜狗手機輸入法,在鎖屏以後程序沒有清理還在進行定位相當耗電,(現在有那種檢測軟體耗電,流量情況就知道是你的軟體在搞鬼),所以你懂得!}
鎖屏和解鎖的廣播接受者是不能在清單檔案中註冊的,必須使用程式碼進行註冊,避免一些惡意程式的騷擾 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方法