最近做一个项目,关于优化启动速度的。现在有两个地方想不明白,还请大家不吝赐教。
当开机,整个java世界起来以后,system_server也启动了相应的服务后,此时系统开始去启动apk。从home开始启动到显示出来的过程中,我从日志看到的是-----home程序起来的同时,某些应用也是开始启动了,在多数应用启动以后,home才display出来。
1.为什么开机某些apk会运行?,,,比如说LatinIME....(我查看了一下LatinIME的AndroidManifest.xml,并没有接受开机广播)2.为什么是当所有会运行的apk加载到内存以后,home程序才会显示出来?(android机制如此?不能像XP那样快速显示界面而在后台跑其他未完全启动的服务么?)
两个问题想不明白,请朋友们赐教赐教。
当开机,整个java世界起来以后,system_server也启动了相应的服务后,此时系统开始去启动apk。从home开始启动到显示出来的过程中,我从日志看到的是-----home程序起来的同时,某些应用也是开始启动了,在多数应用启动以后,home才display出来。
1.为什么开机某些apk会运行?,,,比如说LatinIME....(我查看了一下LatinIME的AndroidManifest.xml,并没有接受开机广播)2.为什么是当所有会运行的apk加载到内存以后,home程序才会显示出来?(android机制如此?不能像XP那样快速显示界面而在后台跑其他未完全启动的服务么?)
两个问题想不明白,请朋友们赐教赐教。
通过查看,是因为框架里面的问题。在InputMethodManagerService.java中的
mCurIntent = new Intent(InputMethod.SERVICE_INTERFACE);
mContext.bindService(mCurIntent, this, Context.BIND_AUTO_CREATE);而InputMethod中定义的public static final String SERVICE_INTERFACE = "android.view.InputMethod";。最后每个输入法的apk的AndroidManifest.xml中有
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
..所以开机启动了
跪求第二个问题的想法
1,Google的工程师不傻,能够开发android系统,如果连这个一点都不知道,是不可思意的,只能说明有这样猜测的工程师太高估自己的想法了。
2,其次zygote会接受socket的信息来决定是否启动新的进程来运行新apk,如果开始就运行的话,android无需采用这样的形式启动新进程。
3,至于启动慢,据我所知,有扫描sdcard的后台服务在运行,可能还有扫描apk安装信息的数据库,所以绝对不是楼主想的那样。
HOME 就是 Launcher,他本身的功能就是加载 应用程序,启动并在桌面显示相应的图片,那么HOME应该是所有程序最后才加载完成的。。不知道理解的对不对。