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

相关文章
相关标签/搜索