关于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 }

下面我来谈谈这个自启动出现的问题:

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

时间: 2024-10-06 13:22:01

关于Android自启动和启动多个进程的相关文章

Android应用程序在新的进程中启动新的Activity的方法和过程分析

Android应用程序在新的进程中启动新的Activity的方法和过程分析 - 老罗的Android之旅 - 博客频道 - CSDN.NET ? ? ? ?前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程. ?? ? ? ?在前面Android进程间通信(IPC)机制B

android开机动画启动流程

从android的Surface Flinger服务启动分析知道,开机动画是在SurfaceFlinger实例通过调用startBootAnim()启动的. 下面我们就一起学习BootAnim是如何启动和结束的,我精读代码前都喜欢先描出框架图,以此图为基础再去研读会达到事半功倍的效果.好吧,直接上图. 内核起来后会启动第一个进程,即init进程. init进程会根据init.rc配置启动surfaceflinger进程. service surfaceflinger /system/bin/su

Android核心服务解析篇(一)——Android系统的启动

从大的方面来说,Android系统的启动可以分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动.第一部分主要包括系统引导,核心和驱动程序等,由于它们不属于本篇要讲的内容,这里就不再讨论.在本篇博客中,我们重点讲解Android系统的启动,这一过程主要经过两个阶段,分别是应用的初始化流程与system_service进程及核心服务的创建流程. 1.初始化流程 初始化流程,顾名思义,它完成Android的一些初始化工作,包括设置必要的环境变量,启动必要的服务进程,挂载必

Android内核开发:图解Android系统的启动过程

本文是<Android内核开发>系列的第六篇文章,前面的几篇文章介绍了Android内核开发相关的基础知识,包括:Android源码的下载.版本和分支介绍.编译和烧写等等,从本文起就要开始真正地进行Android内核的学习及实战了. 学习任何软硬件系统,研究系统启动过程都是一种非常有效地起步手段,搞Android内核开发也不例外.网上有很多文章对Android启动相关代码进行分析和走读,大家可以先搜索阅读一下,我个人更喜欢更加直观的方式去理解未知的东西,包括图.表.系统输出的log信息等等,因

Android核心服务解析篇(三)——Android系统的启动

从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容,这里就不再讨论. 在本篇博客中,我们重点解说Android系统的启动,这一过程主要经过两个阶段.各自是应用的初始化流程与system_service进程及核心服务的创建流程. 1.初始化流程 初始化流程.顾名思义,它完毕Android的一些初始化工作,包含设置必要的环境变量,启动必要的服务进程,挂

Android跨应用启动

前绪: 相信大家,很多时候都是在自己的应用中,启动自己写的Activity,Service.BroadcastReceiver.contentProvider .换句话说,这些都只是 * 单个应用中 组件间 * 的启动.而我们下面要谈论的是 两个应用间 组件 的启动.即--使用 隐式Intent方式 启动应用B的某个组件. 一.在开始之前,先来梳理一下跨应用启动的2种方式: 第一种:在Activity中,启动另一个app的组件. 第二种:在Service中,启动另一个app的组件. 从所周知,A

Android系统进程Zygote启动过程的源代码分析

原文地址:http://blog.csdn.net/luoshengyang/article/details/6747696 Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制:这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程创建过程中是如何实现这两个特点的. Android应用程序框架层创建的应用程序进程的入口函数是ActivityThread.ma

Android系统启动--&gt;应用启动--&gt;界面的展示(一)

参考资料: 1,老罗的Android之旅http://blog.csdn.net/luoshengyang/article/details/6689748 2,Android核心分析http://www.linuxidc.com/Linux/2011-04/33966.htm Android系统的启动: 我们想来一张系统架构图: 一,上面用Git下载编译过程略掉,直接看最后我们Build 的产物. Build 的产物中最重要的是三个镜像文件,位于 /out/target/product/<pro

Android系统的启动过程

当我们拿到一台Android的智能手机,从打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 系统上电 当给Android系统上电,CPU复位之后,程序指针会指向启动地址,从该地址读取启动程序的可执行代码直接运行,或者将可执行代码与数据载入CPU内置的RAM中再运行. CPU复位,其实就是在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,并将程序指针指向引导程序的位置. 这一段代码,放在PC中,叫做BIOS,而在Android等嵌入式系统中就叫做Bootloader