android 驻留广播,Android实现Service永久驻留
說實話,這是一種流氓行為。但有些時候又是不得不需要的。比如微信的NotifyReceiver。現在拋開這些倫理的東西不講,我們只是來看看技術上怎么實現。在后臺運行的service有幾個途徑可以將其停止運行,第一種就是軟件退出;第二種就是通過系統強制停止運行;第三種就是被某些安全軟件殺死。這里我們重點關注后兩種永久駐留的實現。思路有一下幾個:1.通過系統的某些動作來重啟Service;2.在Service的onDestory()通過一系列操作重啟Service。
先看第一種,最常見系統動作就是系統解鎖動作。當系統解鎖時,會發送一個廣播(ACTION_USER_PRESENT)。廣播接收器收到這個廣播后會啟動Service。具體的實現如下面代碼所示:
1 public class BootBroadCastReceiver extends BroadcastReceiver {
2
3 public BootBroadCastReceiver() {
4 }
5
6 @Override
7 public void onReceive(Context context, Intent intent) {
8 if(Intent.ACTION_USER_PRESENT.equals(intent.getAction())){
9 Log.d("PRESENT","received");
10 Intent nIntent=new Intent();
11 nIntent.setClass(context, RunningService.class);
12 context.startService(nIntent);
13 }
14 }
15 }
這里收到系統解鎖的廣播信息(ACTION_USER_PRESENT)后,會通過Intent的方式啟動Service。Service的代碼如下:
1 public class RunningService extends Service {
2
3 public RunningService() {
4 }
5
6 @Override
7 public IBinder onBind(Intent arg0) {
8 return null;
9 }
10 @Override
11 public void onCreate() {
12 super.onCreate();
13 }
14 @Override
15 public void onStart(Intent intent, int startId) {
16 super.onStart(intent, startId);
17 Log.d("start","start");
18 }
19 @Override
20 public boolean onUnbind(Intent intent) {
21 return super.onUnbind(intent);
22 }
23 @Override
24 public void onDestroy() {
25 super.onDestroy();
26 Intent intent=new Intent();
27 intent.setAction("restartService");
28 RunningService.this.sendBroadcast(intent);
29 }
30
31 }
第二種方式就是在Service的OnDestory()方法中,發送一個廣播信息,表示該Service將要被關閉,通過廣播接收器接收到后重啟Service,部分代碼在上面的onDestory()中已經給出。下面給出廣播接收器的代碼:
1 public class ServiceDestoryBroadCastReceiver extends BroadcastReceiver {
2
3 public ServiceDestoryBroadCastReceiver() {
4 //TODO Auto-generated constructor stub
5 }
6
7 @Override
8 public void onReceive(Context context, Intent intent) {
9 if(intent.getAction().equals("restartService")){
10 Intent nIntent=new Intent();
11 nIntent.setClass(context, RunningService.class);
12 context.startService(nIntent);
13 }
14 }
15
16 }
該廣播接收器收到“restartService”的廣播后,會重親啟動Service,這樣便保證了Service的駐留。
這兩種方法我都已經自己做過驗證。尤其是第二種,當我們在系統中點擊強制停止該Service后,Service能夠自動重啟。被安全軟件殺死后是否能夠重啟沒有做過實驗。
總結
以上是生活随笔為你收集整理的android 驻留广播,Android实现Service永久驻留的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android realmax sdk,
- 下一篇: android开发菜单,Android学