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


1.自啟動

需要獲取自啟動權限:

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

這個權限在4.0以后必須需要。否則無法獲取到廣播。

然后我們在廣播中獲取這個通知,然后進行相應的操作:

 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

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

  a).手機差異,比如:我的小米手機無法獲取到通知,需要在權限控制中進行設置。

  但是不知道為什么微信和QQ在安裝上以后默認會有自啟動權限,我懷疑是跟各廠商進行合作開放了自啟動接口。小米v5默認是在啟動后不會給app接收到廣播的。這個如果有哪位高手知道的請告訴我。

  b).關於Service一直保存

    

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 配置成和包名不一樣的,就會是另一個進程,那么就會出現類似微信和支付寶這樣的現象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM