关闭

AndroidManifest.xml解析(二)

953人阅读 评论(0) 收藏 举报

3、第三层(<Activity>):属性

<activityandroid:allowTaskReparenting=["true" | "false"]
          
android:alwaysRetainTaskState=["true" | "false"]
          
android:clearTaskOnLaunch=["true" | "false"]
          
android:configChanges=["mcc""mnc""locale",
                                 
"touchscreen""keyboard""keyboardHidden",
                                 
"navigation""orientation""screenLayout",
                                 
"fontScale""uiMode"]
          
android:enabled=["true" | "false"]
          
android:excludeFromRecents=["true" | "false"]
          
android:exported=["true" | "false"]
          
android:finishOnTaskLaunch=["true" | "false"]
          
android:icon="drawable resource"
          
android:label="string resource"
          
android:launchMode=["multiple" | "singleTop" |
                              
"singleTask" | "singleInstance"]
          
android:multiprocess=["true" | "false"]
          
android:name="string"
          
android:noHistory=["true" | "false"]  
          
android:permission="string"
          
android:process="string"
          
android:screenOrientation=["unspecified" | "user" | "behind" |
                                     
"landscape" | "portrait" |
                                     
"sensor" | "nosensor"]
          
android:stateNotNeeded=["true" | "false"]
          
android:taskAffinity="string"
          
android:theme="resource or theme"
          
android:windowSoftInputMode=["stateUnspecified",
                                       
"stateUnchanged""stateHidden",
                                       
"stateAlwaysHidden""stateVisible",
                                       
"stateAlwaysVisible""adjustUnspecified",
                                       
"adjustResize""adjustPan">   
</activity>

(注:有些在application中重复的就不多阐述了)

1、android:alwaysRetainTaskState

 是否保留状态不变, 比如切换回home, 再从新打开,activity处于最后的状态。比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true

 

2、android:clearTaskOnLaunch 
比如 P 是 activity, Q 是被P 触发的 activity, 然后返回Home, 重新启动 P,是否显示 Q

 

3、android:configChanges

当配置list发生修改时, 是否调用 onConfigurationChanged() 方法  比如 "locale|navigation|orientation". 
这个我用过,主要用来看手机方向改变的. android手机在旋转后,layout会重新布局, 如何做到呢?
正常情况下. 如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity. 就会从onCreate开始重新加载.
如果你设置了 这个选项, 当手机旋转后,当前Activity之后调用onConfigurationChanged() 方法. 而不跑onCreate方法等.

 

4、android:excludeFromRecents

是否可被显示在最近打开的activity列表里,默认是false

 

5、android:finishOnTaskLaunch

当用户重新启动这个任务的时候,是否关闭已打开的activity,默认是false

如果这个属性和allowTaskReparenting都是true,这个属性就是王牌。Activity的亲和力将被忽略。该Activity已经被摧毁并非re-parented


6、android:launchMode(Activity加载模式)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式

Activity有四种加载模式:

standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组),默认为standard

standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。

singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例

singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

singleInstance:

首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。那如果在多个task中共享一个Activity的话怎么办呢。举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity,实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中只有这一个Activity,不同应用的intent都由这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,如果按下了返回键,则无效

 

7、android:multiprocess

是否允许多进程,默认是false

具体可看该篇文章:http://www.bangchui.org/simple/?t3181.html

 

8、android:noHistory

当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。默认是false。Activity不会留下历史痕迹

 

9、android:screenOrientation 

activity显示的模式

默认为unspecified:由系统自动判断显示方向

landscape横屏模式,宽度比高度大

portrait竖屏模式, 高度比宽度大

user模式,用户当前首选的方向

behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的) 

sensor模式:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换

nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了 

 

10、android:stateNotNeeded

activity被销毁或者成功重启时是否保存状态 

 

11、android:windowSoftInputMode

activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。

这个属性能影响两件事情:

【A】当有焦点产生时,软键盘是隐藏还是显示

【B】是否减少活动主窗口大小以便腾出空间放软键盘

各值的含义:

【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

【C】stateHidden:用户选择activity时,软键盘总是被隐藏

【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

【E】stateVisible:软键盘通常是可见的

【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

 

 

4、第四层(<intent-filter>)

结构图:

<intent-filter android:icon="drawable resource"
               
android:label="string resource"
               
android:priority="integer">

      <action />

      <category />

      <data />

</intent-filter>

intent-filter属性

android:priority(解释:有序广播主要是按照声明的优先级别,如A的级别高于B,那么,广播先传给A,再传给B。优先级别就是用设置priority属性来确定,范围是从-1000~1000,数越大优先级别越高)


Intent filter内会设定的资料包括action,data与category三种。也就是说filter只会与intent里的这三种资料作对比动作


action属性

action很简单,只有android:name这个属性。常见的android:name值为android.intent.action.MAIN,表明此activity是作为应用程序的入口。有关android:name具体有哪些值,可参照这个网址:http://hi.baidu.com/linghtway/blog/item/83713cc1c2d053170ff477a7.html

 

category属性

category也只有android:name属性。常见的android:name值为android.intent.category.LAUNCHER(决定应用程序是否显示在程序列表里)

有关android:name具体有哪些值,可参照这个网址:http://chroya.javaeye.com/blog/685871

 

data属性

<data android:host="string"
      
android:mimeType="string"
      
android:path="string"
      
android:pathPattern="string"
      
android:pathPrefix="string"
      
android:port="string"
      
android:scheme="string"/>

【1】每个<data>元素指定一个URI和数据类型(MIME类型)。它有四个属性scheme、host、port、path对应于URI的每个部分: 
scheme://host:port/path 

scheme的值一般为"http",host为包名,port为端口号,path为具体地址。如:http://com.test.project:200/folder/etc

其中host和port合起来构成URI的凭据(authority),如果host没有指定,则port也会被忽略

要让authority有意义,scheme也必须要指定。要让path有意义,scheme+authority也必须要指定

【2】mimeType(指定数据类型),若mimeType为'Image',则会从content Provider的指定地址中获取image类型的数据。还有'video'啥的,若设置为video/mp4,则表示在指定地址中获取mp4格式的video文件

【3】而pathPattern和PathPrefix主要是为了格式化path所使用的

 

5、第四层<meta-data>

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string"/>

这是该元素的基本结构.可以包含在<activity> <activity-alias> <service> <receiver>四个元素中。

android:name(解释:元数据项的名字,为了保证这个名字是唯一的,采用java风格的命名规范,如com.woody.project.fried)

android:resource(解释:资源的一个引用,指定给这个项的值是该资源的id。该id可以通过方法Bundle.getInt()来从meta-data中找到。)

android:value(解释:指定给这一项的值。可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法:[getString],[getInt],[getFloat],[getString],[getBoolean])


6、第三层<activity-alias>属性

<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string">

<intent-filter/> 
<meta-data/>
</activity-alias>

<activity-alias>是为activity创建快捷方式的,如下实例:

<activity android:name=".shortcut">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

            </intent-filter>

</activity>

 <activity-alias android:name=".CreateShortcuts" android:targetActivity=".shortcut" android:label="@string/shortcut">

    <intent-filter>

             <action android:name="android.intent.action.CREATE_SHORTCUT" />

             <category android:name="android.intent.category.DEFAULT" />

     </intent-filter>

 </activity-alias>

其中android.targetActivity是指向对应快捷方式的activity,如上述的shortcut(此Activity名)

android:label是指快捷方式的名称,而快捷方式的图标默认是给定的application图标

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:851527次
    • 积分:7797
    • 等级:
    • 排名:第2662名
    • 原创:97篇
    • 转载:105篇
    • 译文:0篇
    • 评论:233条
    文章分类
    最新评论