首页 > 代码库 > 关于Android自启动和启动多个进程

关于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     @Override12     public void onCreate() {13         // TODO Auto-generated method stub14         Log.i(Tag, "onCreate");15         super.onCreate();16     }17 18     @Override19     public int onStartCommand(Intent intent, int flags, int startId) {20         // TODO Auto-generated method stub21         Log.i(Tag, "onStartCommand");22         new Thread(new Runnable() {23 24             @Override25             public void run() {26                 // TODO Auto-generated method stub27                 while (true) {28                     Log.i(Tag, "执行Service Action");29                     try {30                         Thread.sleep(1000);31                     } catch (InterruptedException e) {32                         // TODO Auto-generated catch block33                         e.printStackTrace();34                     }35                 }36             }37         }).start();38         return START_STICKY;39     }40 41     @Override42     public IBinder onBind(Intent intent) {43         // TODO Auto-generated method stub44         Log.i(Tag, "onBind");45         return null;46     }47 48     @Override49     public void onDestroy() {50         // TODO Auto-generated method stub51         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 配置成和包名不一样的,就会是另一个进程,那么就会出现类似微信和支付宝这样的现象。

关于Android自启动和启动多个进程