当前位置:首页 > 开发 > 移动开发 > 正文

为什么第三方应用能早于System的app启动

发表于: 2015-06-18   作者:gqdy365   来源:转载   浏览:
摘要: Android应用的启动顺序网上有一大堆资料可以查阅了,这里就不细述了,这里不阐述ROM启动还有bootloader,软件启动的大致流程应该是启动kernel -> 运行servicemanager 把一些native的服务用命令启动起来(包括wifi, power, rild, surfaceflinger, mediaserver等等)-> 启动Dalivk中的第一个进程Zygot
Android应用的启动顺序网上有一大堆资料可以查阅了,这里就不细述了,这里不阐述ROM启动还有bootloader,软件启动的大致流程应该是启动kernel -> 运行servicemanager 把一些native的服务用命令启动起来(包括wifi, power, rild, surfaceflinger, mediaserver等等)-> 启动Dalivk中的第一个进程Zygote -> 启动java 层的系统服务system_server(包括PowerManagerService, ActivityManagerService , telephony.registry, DisplayManagerService等等)该服务中的这些部件跟native的那些服务关联在一起 -> 启动Luncher和Persistent的App,该程序是系统级的在AndroidManifest.xml里声明android:persistent="true" -> 发出ACTION_BOOT_COMPLETED广播给其他应用。
在这里需要注意的是声明android:persistent属性为true的APP被kill掉后还是会自动重启的。
系统中我们已知android:persistent属性为true的APP肯定有Phone App,也就是说第三方应用应当至少晚于Phone APP启动,如何判断呢?最简单的办法看其PID的大小,PID值越小越先启动。有其第三方应用可以先于Phone APP启动。我们探其应用的AndroidManifest.xml (PS:如何看APK的代码,网上有你懂的apktool等),发现其在AndroidManifest里定义的静态Receiver的intent-filter的属性如下:

       <receiver android:name="com.anguanjia.safe.AAAReceiver">
            <intent-filter android:priority="2147483647"></intent-filter></span>
                
                
                
                
                
            
            <intent-filter android:priority="2147483647">
                
                
                
                
                
                <data android:scheme="file">
            </data></action></action></action></action></action></intent-filter>
</action></action></action></action></action></receiver>

2147483647 这个值是什么?好大,哦,原来是int的最大值!我们来看下google 文档

android:priority
The priority that should be given to the parent component with regard to handling intents of the type described by the filter. This attribute has meaning for both activities and broadcast receivers:

It provides information about how able an activity is to respond to an intent that matches the filter, relative to other activities that could also respond to the intent. When an intent could be handled by multiple activities with different priorities, Android will consider only those with higher priority values as potential targets for the intent.

It controls the order in which broadcast receivers are executed to receive broadcast messages. Those with higher priority values are called before those with lower values. (The order applies only to synchronous messages; it's ignored for asynchronous messages.)

Use this attribute only if you really need to impose a specific order in which the broadcasts are received, or want to force Android to prefer one activity over others.

The value must be an integer, such as "100". Higher numbers have a higher priority. The default value is 0. The value must be greater than -1000 and less than 1000.


这个值是receiver的优先级,值越大优先级越高,按优先顺序执行,但是文档介绍优先级值大小是-1000~1000. 该应用的是int的最大值, 但android平台没有对android:priority值进行检查。在开机后该应用Receiver的intent-filter的优先级最高,在该filter里的intent被系统发送出来(android.intent.action.MEDIA_MOUNTE, android.net.wifi.WIFI_STATE_CHANGED等等),这个时候App会根据这个intent而被启动起来。
这里需要注意的是该Receiver是个静态的,一定是要注册在AndroidManifest里。当Wifi成功注册后会发出WIFI_STATE_CHANGED的消息, 或者其他的部件完成一些事件后也会发出类似的消息,而这些消息的发出又早于属性为persistent的系统级APP的启动, 由此就会发生第三方应用早于系统级APP的启动的情况。

为什么第三方应用能早于System的app启动

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
http://www.cnblogs.com/moonvan/archive/2012/10/15/2724898.html =====工程A===== 0. 建立工程A,
Android中将应用装到/system/app中 Miui不允许将应用装到sdcard中了,说是不好。那我这点认了,但是
效果图: 说明: 第一行:应用程序名称 第二行:应用程序包名 第三行:应用程序入口Activity名称 代
8.1的协议和wp8是相互通用的 被启动: 相比较wp8而言,基本变化不大,但添加方式更直观了 1:打开Pack
>>>>>> 从网上看了一篇文章,感觉挺有意思,创新点挺有吸引力,特来分享给大家看
Application和Activity中的onCreate都进行了优化,基本没有耗时操作,但是启动应用之后还是会闪现一
APP开发必读(一):第三方服务风起云涌 目前,在移动应用开发领域,服务越来越垂直和细分,每个服
客户希望我们开发的不是一个B/S系统,而是一个客户端应用。 还有在一些需要全屏的需求的B/S系统的时
客户希望我们开发的不是一个B/S系统,而是一个客户端应用。 还有在一些需要全屏的需求的B/S系统的时
客户希望我们开发的不是一个B/S系统,而是一个客户端应用。 还有在一些需要全屏的需求的B/S系统的时
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号