首页 > 代码库 > 关于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 }
下面我来谈谈这个自启动出现的问题:
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自启动和启动多个进程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。