MANIFEST.XML文件ACTIVITY的TASK相关属性 ALWAYSRETAINTASKSTATE作用

本文探讨了Android中保留任务状态的四个关键属性:allowTaskReparenting、alwaysRetainTaskState、clearTaskOnLaunch 和 finishOnTaskLaunch。通过设置这些属性,开发者可以控制应用在后台的行为,如保持任务状态、清除活动等。
今天碰到一个问题,打开android程序,进入其它页面(loginActivity->MenuActivity)后按Home键回到主页面,过段时间后再进入刚才打开的程序,出现的页面是loginActivity,而我想要的是出现MenuActivity。查阅相关资料,再根Activity(loginActivity)添加android:alwaysRetainTaskState="ture"就可以了。 

在中定义了几个常见的task相关属性,它们分别代表了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”,则这个属性好些。
Executing tasks: [testDebugUnitTest] in project E:\7.flower-shop\onlinebookstore\app Starting Gradle Daemon... Connected to the target VM, address: '127.0.0.1:64529', transport: 'socket' Gradle Daemon started in 2 s 741 ms > Task :app:preBuild UP-TO-DATE > Task :app:preDebugBuild UP-TO-DATE > Task :app:javaPreCompileDebug UP-TO-DATE > Task :app:checkDebugAarMetadata UP-TO-DATE > Task :app:generateDebugResValues UP-TO-DATE > Task :app:mapDebugSourceSetPaths > Task :app:generateDebugResources UP-TO-DATE > Task :app:mergeDebugResources UP-TO-DATE > Task :app:packageDebugResources UP-TO-DATE > Task :app:parseDebugLocalResources UP-TO-DATE > Task :app:createDebugCompatibleScreenManifests UP-TO-DATE > Task :app:extractDeepLinksDebug UP-TO-DATE > Task :app:processDebugMainManifest FAILED package="com.example.onlinebookstore" found in source AndroidManifest.xml: E:\7.flower-shop\onlinebookstore\app\src\main\AndroidManifest.xml. Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported, and the value is ignored. Recommendation: remove package="com.example.onlinebookstore" from the source AndroidManifest.xml: E:\7.flower-shop\onlinebookstore\app\src\main\AndroidManifest.xml. E:\7.flower-shop\onlinebookstore\app\src\main\AndroidManifest.xml:37:9-39:40 Error: Element activity#com.example.onlinebookstore.activity.LoginActivity at AndroidManifest.xml:37:9-39:40 duplicated with element declared at AndroidManifest.xml:20:9-59 E:\7.flower-shop\onlinebookstore\app\src\main\AndroidManifest.xml Error: Validation failed, exiting See https://developer.android.com/r/studio-ui/build/manifest-merger for more information about the manifest merger. > Task :app:preDebugUnitTestBuild UP-TO-DATE > Task :app:javaPreCompileDebugUnitTest UP-TO-DATE > Task :app:processDebugUnitTestJavaRes NO-SOURCE FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:processDebugMainManifest'. > Manifest merger failed with multiple errors, see logs * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 11s 12 actionable tasks: 2 executed, 10 up-to-date 21:36:10: Execution finished 'testDebugUnitTest'. Disconnected from the target VM, address: '127.0.0.1:64529', transport: 'socket'
最新发布
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值