Activity2---使用

1封装

baseActivity封装方式

2启动配置

taskAffinity

  taskAffinity用于指定当前Activity(activity1)所关联的Task,allowTaskReparenting用于配置是否允许该activity可以更换从属task,通常情况二者连在一起使用,用于实现把一个应用程序的Activity移到另一个应用程序的Task中。
        allowTaskReparenting用来标记Activity能否从启动的Task移动到taskAffinity指定的Task,默认是继承至application中的allowTaskReparenting=false,如果为true,则表示可以更换;false表示不可以。

引用网上的解释例子:

         一般来说,当Activity启动后,它就与启动它的Task关联,并且在那里耗尽它的整个生命周期。当当前的Task不再显示时,你可以使用这个特性来强制Activity移动到有着affinity的Task中。例如,如果e-mail中包含一个web页的链接,点击它就会启动一个Activity来显示这个页面。这个Activity是由Browser应用程序定义的,但是,现在它作为e-mail Task的一部分。如果它重新宿主到Browser Task里,当Browser下一次进入到前台时,它就能被看见,并且,当e-mail Task再次进入前台时,就看不到它了。

1.android:allowTaskReparenting这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。如果一个这个Activity的元素没有设定此属性,设定在上的此属性会对此Activity起作用。例如在一个应用中要查看一个web页面,在启动系统浏览器Activity后,这个Activity实例和当前应用处于同一个task,当我们的应用退居后台之后用户再次从主选单中启动应用,此时这个Activity实例将会重新宿主到Browser应用的task内,在我们的应用中将不会再看到这个Activity实例,而如果此时启动Browser应用,就会发现,第一个界面就是我们刚才打开的web页面,证明了这个Activity实例确实是宿主到了Browser应用的task内。 

2.android:alwaysRetainTaskState 这个属性用来标记应用的task是否保持原来的状态,“true”表示总是保持,“false”表示不能够保证,默认为“false”。此属性只对task的根Activity起作用,其他的Activity都会被忽略。 默认情况下,如果一个应用在后台呆的太久例如30分钟,用户从主选单再次选择该应用时,系统就会对该应用的task进行清理,除了根Activity,其他Activity都会被清除出栈,但是如果在根Activity中设置了此属性之后,用户再次启动应用时,仍然可以看到上一次操作的界面。 这个属性对于一些应用非常有用,例如Browser应用程序,有很多状态,比如打开很多的tab,用户不想丢失这些状态,使用这个属性就极为恰当。
3.android:clearTaskOnLaunch 这个属性用来标记是否从task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默认为“false”。同样,这个属性也只对根Activity起作用,其他的Activity都会被忽略。 如果设置了这个属性为“true”,每次用户重新启动这个应用时,都只会看到根Activity,task中的其他Activity都会被清除出栈。如果我们的应用中引用到了其他应用的Activity,这些Activity设置了allowTaskReparenting属性为“true”,则它们会被重新宿主到有共同affinity的task中。 4.android:finishOnTaskLaunch 这个属性和android:allowReparenting属性相似,不同之处在于allowReparenting属性是重新宿主到有共同affinity的task中,而finishOnTaskLaunch属性是销毁实例。如果这个属性和android:allowReparenting都设定为“true”,则这个属性好些
------------------------属性:
android:allowTaskReparenting
当某个拥有相同 affinity 的任务即将返回前台时,Activity 是否能从启动时的任务转移至此任务中去 —“true”表示可以移动,“false”表示它必须留在启动时的任务中。
如果未设置本属性,则 < application > 元素中对应的 allowTaskReparenting 属性值将会应用于 Activity 。 默认值是“false”。
通常在启动时,Activity 与启动时的任务相关联,并在整个生命周期都位于此任务中。 利用本属性可以强行让 Activity 在当前任务不再显示时归属于另一个与其 affinity 相同的任务。 典型应用是让一个应用程序的 Activity 转移到另一个应用程序关联的主任务中去。
例如,如果某条 e-mail 信息包含了一个 Web 页的链接,点击此链接将启动一个 Activity 显示此 Web 页。 这个 Activity 是由浏览器程序定义的,但却作为 e-mail 任务的一部分被启动。 如果它重新归属于浏览器的任务,那么在下次浏览器进入前台时就会显示出来,并且会在 e-mail 任务再次回到前台时消失。
Activity 的 affinity 由 taskAffinity 属性定义。 任务的 affinity 由根 Activity 的 affinity 确定。 然而,根据规定,根 Activity 总是位于 affinity 同名的任务中。 因为以“singleTask”和“singleInstance" 模式启动的 Activity 只能位于任务的根部, 所以 Activity 的重新归属仅限于“standard”和“singleTop”启动模式。 (请参阅 launchMode 属性。)
android:alwaysRetainTaskState
系统是否一直维持 Activity 所属任务的状态 —“true”表示是,“false”表示允许系统在特定情况下重启任务。 默认值是“false”。 本属性只对任务的根 Activity 有效,其他 Activity 都忽略本属性。
通常,在用户从主屏幕(Home Screen)重新运行应用程序时,系统有时会清理任务(清除任务栈中根 Activity 以上的所有 Activity)。 执行此操作的典型情况是:用户有段时间(比如30分钟)没有访问该任务了。
然而,一旦本属性设为“true”,则不论用户位于何处,将总是返回任务的最后状态。 举例来说,这对浏览器就很有用,Web 浏览器这类应用需要保持很多状态(诸如多个已打开的页面),用户不期望这些状态马上消失。
android:clearTaskOnLaunch
每次从主屏幕重新执行程序时,是否将任务中除根 Activity 以外的所有 Activity 都清除  — “true”表示总是清除至根 Activity,“false”则不清除。 默认值是“false”。 本属性只对启动新任务的 Activity(根 Activity)有效,其他 Activity 都忽略本属性。
如果此值为“true”,则每当用户再次启动任务时都会进入根 Activity, 无论之前在此任务中做过什么操作,也无论上次是用 Back 还是 Home 键离开任务的。 如果此值为“false”,那么在某些情况下也许还会清理任务(请参阅 alwaysRetainTaskState属性),但并不是每次都会执行。
例如,假设用户从主屏幕启动了 Activity P,又从 P 转到 Activity Q。 接下来用户按下了 Home 键,然后再回到 Activity P 。 通常,用户将会看到 Activity Q,因为在 P 的任务里最后操作的就是 Q。 然而,如果 P 把本属性设为“true”,则用户按下 HOME 键时所有在它之上的 Activity(本例中是Q)都会被清除,任务将进入后台。 因此用户在下次返回该任务时就只会看到 P 了。
如果本属性和  allowTaskReparenting  都设为“true”,那么所有可改变任务归属的 Activity 都会转移到具有相同 affinity 的任务中去,其余的 Activity 都将如上所述被清除。
==============================================================
语法:
< activity android:allowTaskReparenting=["true" | "false"]
    android:alwaysRetainTaskState=["true" | "false"]
    android:clearTaskOnLaunch=["true" | "false"]
    android:configChanges=["mcc", "mnc", "locale",
        "touchscreen", "keyboard", "keyboardHidden",
        "navigation", "screenLayout", "fontScale", "uiMode",
        "orientation", "screenSize", "smallestScreenSize"]
    android:enabled=["true" | "false"]
    android:excludeFromRecents=["true" | "false"]
    android:exported=["true" | "false"]
    android:finishOnTaskLaunch=["true" | "false"]
    android:hardwareAccelerated=["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:parentActivityName="string" 
    android:permission="string"
    android:process="string"
    android:screenOrientation=["unspecified" | "behind" |
        "landscape" | "portrait" |
        "reverseLandscape" | "reversePortrait" |
        "sensorLandscape" | "sensorPortrait" |
        "userLandscape" | "userPortrait" |
        "sensor" | "fullSensor" | "nosensor" |
        "user" | "fullUser" | "locked"]
    android:stateNotNeeded=["true" | "false"]
    android:taskAffinity="string"
    android:theme="resource or theme"
    android:uiOptions=["none" | "splitActionBarWhenNarrow"]
    android:windowSoftInputMode=["stateUnspecified",
        "stateUnchanged", "stateHidden",
        "stateAlwaysHidden", "stateVisible",
        "stateAlwaysVisible", "adjustUnspecified",
        "adjustResize", "adjustPan"] > 
    . . .
< /activity >

  android:finishOnTaskLaunch
每当用户再次启动任务时(在主屏幕上选择该任务),已存在的 Activity 实例是否应该关闭 — “true”表示需要关闭,“false”表示不要关闭。 默认值是“false”。
如果本属性和 allowTaskReparenting 都设为“true”,则本属性优先。 Activity 的 affinity 将被忽略。 Activity 将不会改变归属的任务,而是被销毁。
android:hardwareAccelerated
是否为本 Activity 开启硬件加速渲染功能 —“true”表示开启,“false”表示关闭。 默认值是“false”。
自 Android 3.0 开始,应用程序可以使用硬件加速的 OpenGL 渲染器来改善很多常用 2D 图形操作的性能。 当硬件加速渲染开启时,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 内的操作都会被加速。 即使应用程序没有显式调用系统 OpenGL 库,这仍能使动画更加平滑、屏幕滚动也更加平顺、整体响应性能获得改善。 因为启用硬件加速功能需要更多的资源,应用程序将消耗更多的 RAM 。
请注意,并非所有的 OpenGL 2D 操作都会被加速。 如果开启了硬件加速渲染功能,请对应用程序进行测试,以确保渲染的正常使用。
android:icon
代表 Activity 的图标。 当需要在屏幕上用图标来表示 Activity 时,将会显示本图标。 例如,在桌面(launcher)窗口中显示用于启动任务的 Activity 图标。 图标常常伴随着一个文本标签(请参阅android:label属性)。
本属性必须设为对 drawable 资源的引用,资源内包含了图片的定义。 如果未设置本属性,则用作为全局设置的应用程序图标代替(请参阅 < application > 元素的 icon 属性)。
Activity 的图标 — 无论是用本属性还是用 < application > 元素的属性设置的 — 都将同时作为 Activity 所有 Intent 过滤器的缺省图标(请参阅 < intent-filter > 元素的 icon 属性。
android:label
供用户阅读的 Activity 的 Label。 当必须向用户标识 Activity 时,本 Label 将显示在屏幕上。 Label 常常是跟在 Activity 图标后面显示的。
如果未设置本属性,则用作为全局设置的应用程序  Label 代替(请参阅 < application > 元素的 label 属性)。
Activity 的 Label — 无论是用本属性还是用 < application > 元素的属性设置的 — 都将作为 Activity 所有 Intent 过滤器的缺省 Label(请参阅 < intent-filter > 元素的 label 属性)。
Label 应设为一个对字符串资源的引用,这样就能像其他用户界面内的字符串一样对其进行本地化。 不过,考虑到开发时的便利性,也可以直接将其设为字符串。
---------------------
android:launchMode
指明 Activity 的启动模式。 当调用 Activity 来处理 Intent 时, Activity 的工作模式与四种标志(FLAG_ACTIVITY_*常量有关,这些常量在 Intent 中定义。它们是:
“standard”
“singleTop”
“singleTask”
“singleInstance”
缺省模式是“standard”。
如下表所述,这些模式归为两组: “standard”和“singleTop”模式的 Activity 为一组,  “singleTask”和“singleInstance”模式的 Activity 为另一组。 用“standard”或“singleTop”模式启动的 Activity 可以被实例化多次。 这些实例可以属于任何一个任务,并且可以处于 Activity 栈的任何位置。 典型情况下,它们被任务通过调用 startActivity() 启动并置入其中(除非 Intent 对象包含 FLAG_ACTIVITY_NEW_TASK 标志,这种情况下会选取其他任务 — 请参阅 taskAffinity  属性)。
相反,“singleTask”和“singleInstance”模式的 Activity 只能启动一个任务。 它们总是位于 Activity 栈的根部。 不仅如此,设备同时只保留一个 Activity 实例 —  只启动一个任务。
“standard”和“singleTop”模式之间只有一点不同: 每次有“standard”模式 Activity 的 Intent 发生时, 都会新建一个 Activity 类的实例来响应该 Intent。 每个实例只负责处理一个 Intent 。 同理,singleTop 模式 Activity 的新实例也可以用于处理新发生的 Intent 。 不过,如果目标任务的栈顶已经存在该 Activity 的实例了,则此实例将收到这个新 Intent(在 onNewIntent() 里);而不会再创建新的实例了。 在其他情况下 — 比如目标任务中已存在“singleTop”模式的 Activity 但却不是在栈顶,或者在栈顶但却不是位于目标任务中 — 还是会创建新的实例并压入栈顶。
“singleTask”和“singleInstance”模式之间也只有一点差别: “singleTask”模式的 Activity 允许其他 Activity 加入它的任务。 它总是处于任务的根部,而其他 Activity (必须是“standard”和“singleTop”模式的 Activity )可以在它的任务中启动。 相反,“singleInstance”模式的 Activity 就不允许其他 Activity 加入它的任务,它是任务里唯一的 Activity 。 如果它启动了其他 Activity,也会被放入另一个任务中 — 类似 Intent 中设置了 FLAG_ACTIVITY_NEW_TASK 标志的情况。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值