有时候我们对手机重新刷ROM后或者升级了某些程序开机时会显示"Android正在升级..."的提示,这个过程实际上是DalvikVM对程序进行优化的过程。Android启动时,Dalvik VM扫描所有的app,并为它们创建了一个依存关系库,DalvikVM通过这个依存关系树来为每个程序优化代码并存储在Dalvik缓存中(dalvik-cache),程序运行会使用优化过的代码。

正常情况下手机第一次开机会执行DexOpt的优化,第一次开机是在后台执行,不会有提示,如果以后开机dalvik发现某个应用发生变化会重新执行代码优化并将优化后的代码存入对应的dalvik-cache中,非第一次开机的优化过程都会有"Android正在升级"的提示。如果想无论什么情况下都不提示可以修改下面代码,注释掉如下的代码:

frameworks\base\services\java\com\android\server\pm\PackageManagerService.java     public void performBootDexOpt() {        ArrayList pkgs = null;        synchronized (mPackages) {            if (mDeferredDexOpt.size() > 0) {                pkgs = new ArrayList(mDeferredDexOpt);                mDeferredDexOpt.clear();            }        }        if (pkgs != null) {            for (int i=0; i                /*if (!isFirstBoot()) {                    try {                        ActivityManagerNative.getDefault().showBootMessage(                                mContext.getResources().getString(                                        com.android.internal.R.string.android_upgrading_apk,                                        i+1, pkgs.size()), true);                    } catch (RemoteException e) {                    }                }*/

PackageManagerService.java 
主要负责apk程序的安装、检查和优化等,下面是一个apk程序的安装过程:

V/PackageManager(  374): Install from ADBI/PackageManager(  374): init_copyI/PackageManager(  374): Trying to bind to DefaultContainerServiceI/PackageManager(  374): idx=0W/ActivityManager(  374): No content provider found for permission revoke: file:///data/local/tmp/subwaysurf_1.30.0.apkW/ActivityManager(  374): No content provider found for permission revoke: file:///data/local/tmp/subwaysurf_1.30.0.apkI/PackageManager(  374): Copying native libraries to /data/app-lib/vmdl201603937V/NativeLibraryHelper(  374): Comparing ABIs armeabi-v7a and armeabi versus armeabi-v7a/libmain.soV/NativeLibraryHelper(  374): Using primary ABI armeabi-v7aV/NativeLibraryHelper(  374): Couldn't stat /data/app-lib/vmdl201603937/libmain.so, copying: No such file or directoryV/NativeLibraryHelper(  374): Successfully moved /data/app-lib/vmdl201603937/tmp.Fta374 to /data/app-lib/vmdl201603937/libmain.soV/NativeLibraryHelper(  374): Comparing ABIs armeabi-v7a and armeabi versus armeabi-v7a/libmono.soV/NativeLibraryHelper(  374): Using primary ABI armeabi-v7aV/NativeLibraryHelper(  374): Couldn't stat /data/app-lib/vmdl201603937/libmono.so, copying: No such file or directoryV/NativeLibraryHelper(  374): Successfully moved /data/app-lib/vmdl201603937/tmp.woL374 to /data/app-lib/vmdl201603937/libmono.soV/NativeLibraryHelper(  374): Comparing ABIs armeabi-v7a and armeabi versus armeabi-v7a/libunity.soV/NativeLibraryHelper(  374): Using primary ABI armeabi-v7aV/NativeLibraryHelper(  374): Couldn't stat /data/app-lib/vmdl201603937/libunity.so, copying: No such file or directoryD/MemClearService(  460): getmem_UNUSED = 92MB, extraAvailableSize=81MB,testret=153MB,realret=145MBV/NativeLibraryHelper(  374): Successfully moved /data/app-lib/vmdl201603937/tmp.HDU374 to /data/app-lib/vmdl201603937/libunity.soI/PackageManager(  374): Checking for more work or unbind...I/PackageManager(  374): Posting delayed MCS_UNBINDD/PackageManager(  374): manifestDigest was not present, but parser got: ManifestDigest {mDigest=cc,e1,d4,b2,95,ad,14,81,da,af,40,c9,39,64,73,5c,f5,ad,78,26,}V/NativeLibraryHelper(  374): Comparing ABIs armeabi-v7a and armeabi versus armeabi-v7a/libmain.soV/NativeLibraryHelper(  374): Using primary ABI armeabi-v7aV/NativeLibraryHelper(  374): /data/app-lib/com.kiloo.subwaysurf-1/libmain.so: crc = 3abf987b, zipCrc = 3abf987bV/NativeLibraryHelper(  374): Comparing ABIs armeabi-v7a and armeabi versus armeabi-v7a/libmono.soV/NativeLibraryHelper(  374): Using primary ABI armeabi-v7aI/PackageManager(  374): Linking native library dir for /data/app/com.kiloo.subwaysurf-1.apkI/PackageManager(  374): Running dexopt on: com.kiloo.subwaysurfV/installd(   75): DexInv: --- BEGIN '/data/app/com.kiloo.subwaysurf-1.apk' ---D/LogIfSlow(  374): start at 1074702493msD/LogIfSlow(  374): end durationMillis is 0msD/MemClearService(  460): getmem_UNUSED = 94MB, extraAvailableSize=82MB,testret=156MB,realret=148MBV/installd(   75): DexInv: --- END '/data/app/com.kiloo.subwaysurf-1.apk' (success) ---I/ActivityManager(  374): Force stopping package com.kiloo.subwaysurf appid=10055 user=-1V/ActivityManager(  374): Activity idle: nullV/installd(   75): move /data/dalvik-cache/data@app@com.kiloo.subwaysurf-1.apk@classes.dex -> /data/dalvik-cache/data@app@com.kiloo.subwaysurf-1.apk@classes.dexD/PackageManager(  374): New package installed in /data/app/com.kiloo.subwaysurf-1.apk



更多相关文章

  1. 第一个Android程序
  2. [Android]从新旧API看android代码演进
  3. Android 中,应用程序需要的图片资源如何针对不同屏幕大小手机设计
  4. 分析点击android桌面app图标启动应用程序的过程
  5. Android系统集成有源码的第三方库和程序
  6. android 代码设置EditText的hint字符
  7. android代码审查工具---lint工具的使用

随机推荐

  1. 资讯:Google I/O 2015 为 Android(安卓)开
  2. Android之旅十七 android中的广播使用
  3. 三言两语我心目中的Android
  4. Android(安卓)API Guides---Location and
  5. Android(安卓)音乐播放器设计
  6. Android(安卓)UI Design Tips(Google官方
  7. android ->在界面上使用URI编程 ----开发
  8. Android中TextView中的文字颜色设置setTe
  9. Android获取输入法高度——输入法与页面
  10. Android(安卓)源码开发系列(二)Android(安