关于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 配置成和包名不一样的,就会是另一个进程,那么就会出现类似微信和支付宝这样的现象。

posted @ 2014-09-17 00:51  q429786006  阅读(3769)  评论(0编辑  收藏  举报