關於Android自啓動和啓動多個進程

1.自啓動android

須要獲取自啓動權限:微信

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

這個權限在4.0之後必須須要。不然沒法獲取到廣播。app

而後咱們在廣播中獲取這個通知,而後進行相應的操做:ide

 1 package com.example.com.mac.bootdeme;
 2 
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.IBinder;
 6 import android.util.Log;
 7 
 8 public class BootService extends Service {
 9     String Tag = "BootService";
10 
11     @Override
12     public void onCreate() {
13         // TODO Auto-generated method stub
14         Log.i(Tag, "onCreate");
15         super.onCreate();
16     }
17 
18     @Override
19     public int onStartCommand(Intent intent, int flags, int startId) {
20         // TODO Auto-generated method stub
21         Log.i(Tag, "onStartCommand");
22         new Thread(new Runnable() {
23 
24             @Override
25             public void run() {
26                 // TODO Auto-generated method stub
27                 while (true) {
28                     Log.i(Tag, "執行Service Action");
29                     try {
30                         Thread.sleep(1000);
31                     } catch (InterruptedException e) {
32                         // TODO Auto-generated catch block
33                         e.printStackTrace();
34                     }
35                 }
36             }
37         }).start();
38         return START_STICKY;
39     }
40 
41     @Override
42     public IBinder onBind(Intent intent) {
43         // TODO Auto-generated method stub
44         Log.i(Tag, "onBind");
45         return null;
46     }
47 
48     @Override
49     public void onDestroy() {
50         // TODO Auto-generated method stub
51         Log.i(Tag, "onDestroy");
52         super.onDestroy();
53     }
54 }
View Code

下面我來談談這個自啓動出現的問題:spa

  a).手機差別,好比:個人小米手機沒法獲取到通知,須要在權限控制中進行設置。code

  可是不知道爲何微信和QQ在安裝上之後默認會有自啓動權限,我懷疑是跟各廠商進行合做開放了自啓動接口。小米v5默認是在啓動後不會給app接收到廣播的。這個若是有哪位高手知道的請告訴我。對象

  b).關於Service一直保存blog

    

START_STICKY:若是service進程被kill掉,保留service的狀態爲開始狀態,但不保留遞送的intent對象。隨後系統會嘗試從新建立service,因爲服務狀態爲開始狀態,因此建立服務後必定會調用onStartCommand(Intent,int,int)方法。若是在此期間沒有任何啓動命令被傳遞到service,那麼參數Intent將爲null。
 
START_NOT_STICKY:「非粘性的」。使用這個返回值時,若是在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啓該服務。
 
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,若是在執行完onStartCommand後,服務被異常kill掉,系統會自動重啓該服務,並將Intent的值傳入。
 
 
START_STICKY_COMPATIBILITY: START_STICKY的兼容版本,但不保證服務被kill後必定能重啓。
 
2.關於一個App多個進程
 相關配置 android:process="XXX"
<service
            android:name="com.example.com.mac.bootdeme.BootService"
            android:process="com.example.com.mac.bootdeme.BootService" >
        </service>

 默認狀況下android中全部的組件都隨包名走,因此只會在Setting中出現一個進程一個服務。若是想讓某一個組件單出來,那麼android:process 配置成和包名不同的,就會是另外一個進程,那麼就會出現相似微信和支付寶這樣的現象。接口

相關文章
相關標籤/搜索