读书人

三、什么是ROM什么是RUU

发布时间: 2012-08-26 16:48:05 作者: rapoo

3、什么是ROM,什么是RUU。
Android应用及应用管理简介一、概述

????? 07年,Google公司推出了基于Java语言的Android平台,引起了IT业界的一致关注,同年,播思通讯公司开始研发基于其的OPhone平台。

????? 08年,第一款Android手机G1面世,这款Google为HTC量身打造的滑盖手机由T Mobile发行,获得了用户的极大好评,也为整个Android平台的正式商用作出了榜样。

????? 09年,将是OPhone/Android手机的第一个井喷年,播思通讯联合中国移动和各个手机厂商即将推出多款触屏手机。同时,Android社区也日趋壮大,已拥有各种应用五百多个,并在快速增长之中。

????? 本文将对Android应用结构及Android系统的应用管理加以介绍。

????? 本文面对的读者是对Android应用的研发人员、或有过Android开发经验的入门者。

二、Android应用结构?什么是Android应用?

????? 理解什么是Android应用是Android入门所必须的,也是了解应用管理的前提。

????? 那什么是Android应用呢?即指基于Android开发,编译,运行在Android平台的应用。这种应用在编译阶段被打成一个jar包,以.apk结尾,包内包含了所有运行阶段需要的代码与资源,其中主要分为三块:描述文件AndroidManifest.xml、代码段和运行时资源。

AndroidManifest.xml

????? AndroidManifest.xml是Android应用的描述文件,它描述了该应用的相关信息,主要包括以下各个元素。

包名(package)

????? 指定本应用内java主程序包的包名。当没有指定apk的文件名时,编译后产生程序包将以此命名。本包名应当在Android系统运行时唯一。

认证(certificate)

????? 指定本应用程序所授予的信任级别,目前有的认证级别有platform(system)、shared、media以及应用自定义的认证。不同的认证可以享受不同的权限。

权限组(permission-group)

????? 权限组的定义是为了描述一组具有共同特性的权限。Android系统中预订了一些组,它们是:

  • Intent apkintent = new Intent(Intent.ACTION_VIEW); final Uri puri = Uri.fromFile(new File(path)); //path is the path of source apk apkintent.setDataAndType(puri, "application/vnd.android.package-archive"); startActivity(apkintent);?使用API安装

    ????? Android系统提供了安装应用的API:PackageManager.installPackage(final Uri packageURI,?
    ???? final IPackageInstallObserver observer, final int flags);?

  • Uri packageURI = Uri.parse("package:"+packageName); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); startActivity(uninstallIntent);
    使用API卸载

    ????? Android提供了卸载应用的标准API:PackageManager().deletePackage(String packageName, IPackageDeleteObserver observer, int flags);

    1. observer实现了回调函数packageDeleted(boolean succeeded)以检查卸载是否成功
    2. flags提供卸载标识。Android平台提供的标识有

    ????? PackageManager.DONT_DELETE_DATA = 0x00000001;
    ????? 标识卸载时是否同时删除用户数据。?

    ????? 本API需要"android.permission.DELETE_PACKAGES"权限,该权限属于签名级别,因此只有系统级别的应用程序才能使用。

    删除即卸载

    ????? 对应于拷贝即安装,系统同样支持删除即卸载功能。当用户删除/sdcard/app目录下安装包时,系统将自动检测到删除事件并卸载对应应用。
    ????? 本方法适合一次删除大量应用。

    卸载步骤
  • 删除代码段如果需要删除用户数据,则删除建立/data/data/包名的文件夹,以存放用户数据删除应用信息
  • 删除安装包?应用使用

    ????? 应用安装后即处于可用状态。对于系统中所有应用,从管理层面分为信息管理和应用调度两部分;从应用自身角度分为去激活与激活两种状态。

    信息管理

    ????? Android应用的相关信息在AndroidManifest.xml文件中定义,前面已经介绍,信息管理的第一步就是加载信息。

    ?系统启动时,将根据安装目录的不同,先后对已安装应用进行信息加载;系统启动后,运行时安装的应用,在安装成功后进行信息加载。

    系统中所有信息加载后,在system service进程(Android应用的核心进程,存放了几乎所有的系统service和核心数据结构)中形成了对应数据结构:

  • permission数据:应用申请的使用权限在此存放,标识了哪些应用有哪些权限。application数据:每一个应用生成一个application数据,标识了application模块的各种属性和源文件/用户数据的路径。providers数据:存放了所有的provider及其属性receiver数据:存放所有receiver及其属性service数据:存放所有service及其属性
  • activity数据:存放所有的activity及其属性。?应用调度

    ????? 应用调度既所有应用的运行时管理,是建立在信息管理之上的。根据运行时模块的静态信息,系统可以进行模块加载和管理。

  • 根据application信息,可以得知哪些应用是常驻内存应用,哪些应用是动态加载的应用根据provider信息,可以得知哪些provider是系统级的,哪些是应用级别的,哪些是公开的,哪些是内不得根据activity信息,可以获得目标UI来处理用户请求
  • 根据receiver信息,可以得知哪些消息可以被处理??去激活与激活状态

    ????? 系统启动时,应用信息会被加载,而应用未被启动,此时所有应用处于去激活状态。系统启动完成时,常驻内存应用将被启动,这些应用在系统运行中始终处于激活状态。对于其他应用,当运行时模块(activity,service,receiver,provider等)被调度时,应用将会激活。

    ????? 对于所有已激活的应用,系统将之纳入进程管理和内存管理。进程管理将缓存应用运行时数据和状态,当应用因非正常原因被杀掉后,将有机会在重启后恢复原来状态。系统内存不足时,加通过杀掉非常驻内存应用来释放内存,其优先级为空闲应用>后台应用(即有后台UI)>前台应用(即有UI在前台)。

    ????? 当应用所在进程被杀掉后,应用重新回到去激活状态。

    应用使用的API

    ????? Android系统为应用管理功能提供了大量的API。根据功能的不同,这些API分为两大类:PackageManager相关和ActivitManager相关。

    PackageManager相关

    ????? 本类API是对所有基于加载信息的数据结构的封装,包括以下功能:

  • 安装,卸载应用查询permission相关信息查询Application相关信息(application,activity,receiver,service,provider及相应属性等)查询已安装应用增加,删除permission
  • 清除用户数据、缓存,代码段等

    非查询相关的API需要特定的权限,具体的API请参考SDK文档。

    ActivityManager相关

    ????? 本类API是对运行时管理功能和运行时数据结构的封装,包括以下功能

  • 激活/去激活activity注册/取消注册动态接受intent发送/取消发送intentactivity生命周期管理(暂停,恢复,停止,销毁等)activity task管理(前台->后台,后台->前台,最近task查询,运行时task查询)激活/去激活service
  • 激活/去激活provider等

    task管理相关API需要特定的权限,具体API可参考SDK文档。

    三、总结

    ????? 本文实质上是对Android相关API的理论总结与串联,从总体上介绍应用管理的相关知识,并不是一份开发文档或教材,读者仍然需要参考SDK文档中。

    ????? 如果读者看完本文后,对于应用管理有了一定理论基础,对开发有一定的帮助。本文的目的也就达到了。?(作者:邹伟)

    (声明:本网的新闻及文章版权均属OPhone SDN网站所有,如需转载请与我们编辑团队联系。任何媒体、网站或个人未经本网书面协议授权,不得进行任何形式的转载。已经取得本网协议授权的媒体、网站,在转载使用时请注明稿件来源。)

  • 读书人网 >移动开发

    热点推荐