1. 程式人生 > >鎖屏清理程序(廣播接受者)

鎖屏清理程序(廣播接受者)

  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方法