PackageManager安装过程二 _sunny getpackagemanager

PackageManager安装过程(二)_sunny getpackagemanager

packagesappsPackageInstaller下InstallAppProgress.java调用installPackageWithVerificationAndEncryption()正式进入PackageManagerService.java。

PackageManagerService类中installPackageWithVerificationAndEncryption()中有一个

final Message msg = mHandler.obtainMessage(INIT_COPY);

msg.obj = new InstallParams();

进入PackageHandler类的handleMessage()方法,handleMessage()会调用doHandleMessage()方法,处理INIT_COPY消息,之后再handleMessage(),doHandleMessage(),处理MSC_BOUND。在处理MSC_BOUND消息时,会调用params.startCopy()方法,params是HandlerParams对象。startCopy()方法中会调用handleStartCopy()方法,由此进入InstallParams的handleStartCopy()方法。

handleStartCopy()方法通常会直接进入

if (packageFile != null) {

// Remotecall to find out default install location

finalString packageFilePath = packageFile.getAbsolutePath();

pkgLite =mContainerService.getMinimalPackageInfo(packageFilePath, flags,

lowThreshold);

...}这段。重点看下pkgLite的初始化过程,即pkgLite =mContainerService.getMinimalPackageInfo(packageFilePath,flags,lowThreshold);mContainerService是IMediaContainerService对象,从IMediaContainerService类的起名就可以看出,这个类不可能有实例化对象,实例化的对象必然要有它的实现类来初始化,对应的类是DefaultContainerService.java,DefaultContainerService.java中getMinimalPackageInfo()调用PackageParser.parsePackageLite()得到PackageParser.PackageLite信息,从而初始化PackageInfoLiteret信息,其中PackageInfoLite的ret.recommendedInstallLocation信息尤其关键,它决定了应用安装的位置。详细看下ret.recommendedInstallLocation的获取过程,recommendAppInstallLocation()方法。recommendAppInstallLocation()这个函数根据packageInfo的installLocation和flags两个信息找出最佳安装位置,即PackageHelper.RECOMMEND_INSTALL_INTERNAL或PackageHelper.RECOMMEND_INSTALL_EXTERNAL。对应data区和SD卡区。一切正常,流程到if (ret == PackageManager.INSTALL_SUCCEEDED) { int loc =pkgLite.recommendedInstallLocation; Log.d(TAG,"[handleStartCopy]---gaoyh loc =" + loc); if (loc ==PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION) { ret =PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION; } else if (loc ==PackageHelper.RECOMMEND_FAILED_ALREADY_EXISTS) { ret =PackageManager.INSTALL_FAILED_ALREADY_EXISTS; } else if (loc ==PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE) { ret =PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE; 。。。}过程,通常情况下,package的flags值为0,那么位置选择为PackageHelper.RECOMMEND_INSTALL_INTERNAL,进入} else if (!onSd && !onInt) { //Override install location with flags if (loc ==PackageHelper.RECOMMEND_INSTALL_EXTERNAL) { // Set the flag to install onexternal media. flags |=PackageManager.INSTALL_EXTERNAL; flags &=~PackageManager.INSTALL_INTERNAL; } else{ // Make sure the flag forinstalling on external // media is unset flags |=PackageManager.INSTALL_INTERNAL; flags &=~PackageManager.INSTALL_EXTERNAL; Log.d(TAG,"[handleStartCopy]---gaoyh new flags =" + flags); } }中的else代码段,flags |=PackageManager.INSTALL_INTERNAL;flags &=~PackageManager.INSTALL_EXTERNAL;之后 final InstallArgs args= createInstallArgs(this);选择FileInstallArgs作为实现类,再往下跟,if (requiredUid != -1 &&isVerificationEnabled(flags)) {}这个通常是不走的,从而程序直接进入 ret = args.copyApk(mContainerService,true);过程。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/267473.html

更多阅读

整体橱柜的安装过程 橱柜怎么安装视频教程

? ??对于整体厨柜而言,现场安装是相当重要的一个环节,厨柜的安装主要步骤有以下几个环节:1.拼装单个下柜柜体(逐个拼装后连接以三合一螺丝连接柜体板)——→2.安装柜脚(调整脚)——→3.连接下柜柜体——→4.安装铰链——→5.安装下柜门板—

itunes安装不上解决方案 itunes安装过程中出错

itunes安装不上解决方案——简介很多使用iphone用户的人都遇到过这种情况,就是itunes装不上,今天教大家一键修复itunes的方法、itunes安装不上解决方案——工具/原料电脑360itunes安装不上解决方案——方法/步骤itunes安装不上解决

一二三搞定360企业版之二--下载安装 360云盘企业版下载

书接上回,环境准备好之后, 就可以开始下载安装360企业版了. 一.下载访问360企业版的官网, http://b.360.cn. 界面如下:如果您的控制中心可以直接上网, 请点击红色圈的链接, 直接下载安装.如果控制中心处于隔离网内部, 无法上网

美标坐式马桶的安装过程 美标马桶安装说明书

今年双11,淘宝上淘了一个美标的坐式马桶,价格999元。所有需要的配件也都是赠送,感觉很值。 货运时间比较长,包装很严实,打开后发现跟以前买的完全不一样。配件好多,安装起来会比较麻烦。 像我们这样什么东西都网购的人,东西买来之后,只能DIY

穿刺线夹安装过程 穿刺取精子过程

欧卡姆穿刺线夹的四个安装过程第一步:先将支线插入侧帽第二步:将主线卡进线夹并用手调整主线与支线是否平行,再逐渐拧紧螺母第三步:用专用套筒逐渐拧紧力矩螺母第四步:拧至力矩螺母脱落,安装完成

声明:《PackageManager安装过程二 _sunny getpackagemanager》为网友叚丆正經分享!如侵犯到您的合法权益请联系我们删除