zoukankan      html  css  js  c++  java
  • 又议android中的manifest清单文件

    写过java程序的人,都知道了配置文件时java实现各种各样的框架的一大利器,manifest清单文件对android的作用自然不言而喻,然而他里面究竟定义了些什么,并且他是如何加载到程序中的。

    他里面定义了什么了,定义的无非是一些android程序配置的节点信息。我们打开他的开发文档,能够精确的看到清单文件的定义。

    android中manifest文件的定义为。

    <?xmlversion="1.0"encoding="utf-8"?>

    <manifest>

        <application>

           <activity>

               <intent-filter>

                   <action/>

                   <category/>

               </intent-filter>

          </activity>

           <activity-alias>

               <intent-filter></intent-filter>

               <meta-data/>

          </activity-alias>

           <service>

               <intent-filter></intent-filter>

               <meta-data/>

           </service>

           <receiver>

               <intent-filter></intent-filter>

               <meta-data/>

           </receiver>

           <provider>

               <grant-uri-permission/>

               <meta-data/>

           </provider>

           <uses-library/>

        </application>

        <uses-permission/>

        <permission/>

        <permission-tree/>

        <permission-group/>

        <instrumentation/>

        <uses-sdk/>

        <uses-configuration/> 

        <uses-feature/> 

        <supports-screens/>

    </manifest>

    通过上面组织结构,我们能够清晰看到<application>是程序的第一层,他意味着所有的子节点由他包裹。他是程序的根节点。

    而android的四大对象,activity,service,receiver,provider并列组成了相应的第二级,他们才能使android程序由冰冷冷的源代码变的栩栩如生。

    此外他还定义了一些android程序支持的附加属性,如对用户权限限制的<uses-permission/>,对用户屏幕尺寸及分辨率限制的 <supports-screens/>。这样就是较为完整的manifest的清单文件的构件。对于他的结构,我不想做过多赘述,因为这百度一下,遍地都是。

    我们来通过源代码的分析,看他是如何加载到程序中,如何运行的了。

    他主要是通过packagemanager这个包加载器来对程序进行加载。他大概源代码预览是这样的:

    packagemanager的源代码很多,我们这里这里只看他的一两个方法

     public abstract XmlResourceParser getXml(String packageName, int resid,
                ApplicationInfo appInfo);

    这是一个抽象方法,他定义了从xml文件中,来加载相应的包的信息,和application的相关的信息了,那这个文件是什么,那就是manifest文件了。怎么解析xml,不想多说了。

    那他碰到这节点,是怎么进行实例化的。采取按需实例化的原则了,怎么符合嵌入式软件设计的原则了,能够节省内存开销,提高执行效率。

    这就是我对manifest清单文件的一点了解,恳请大家指教。

  • 相关阅读:
    PyQt5-QComboBox控件使用
    PyQt5-按钮控件使用
    PyQt5-QTextEdit控件使用
    Ubuntu12.04下YouCompleteMe安装教程(部分)
    ubuntu下vim的简单配置
    VirtualBox下vim无法正常使用问题解决
    树莓派下ubuntu-mate中ssh服务的安装与开机后自启动
    水仙花小游戏
    C语言实现判断分数等级
    临时记录(不断更新)
  • 原文地址:https://www.cnblogs.com/manuosex/p/3216307.html
Copyright © 2011-2022 走看看