如何在用户离开应用程序时将堆栈清除回根活动?

Adr*_*ian 15 android android-activity

我有一个包含2个活动的应用程序,LogonAct和MainAct.LogonAct是一个登录活动,我想强制用户每次返回应用程序时都要经历.我在LogonAct上设置了android:clearTaskOnLaunch ="true".

当我第一次启动应用程序时,我会经历这一系列的屏幕,

Home -> LogonAct -> MainAct -> Home

然后我按照这个顺序,

LogonAct -> Back -> MainAct

为什么要把我带回MainAct?由于LogonAct具有android:clearTaskOnLaunch ="true",因此该活动不应该被关闭.当我从LogonAct点击Back按钮时,我希望能够回到Home.

来自AndroidManifest.xml的相关代码段,

   <activity android:name=".LogonAct"
             android:clearTaskOnLaunch="true">
       <intent-filter>
           <action android:name="android.intent.action.MAIN"/>
           <category android:name="android.intent.category.LAUNCHER"/>
       </intent-filter>
   </activity>

   <activity android:name=".MainAct">
       <meta-data android:name="android.app.default_searchable"
                  android:value=".SearchResults" />
   </activity>
Run Code Online (Sandbox Code Playgroud)

我用的是1.5.

任何帮助赞赏.

Ars*_*niy 15

您可以执行以下操作:
1.在AndroidManifest中设置clearTaskOnLaunch ="true",在主要活动
2的声明中,在必须关闭的活动中:

@Override
public void onBackPressed(){
    moveTaskToBack(true);
}
Run Code Online (Sandbox Code Playgroud)

因此,如果用户按下 - 如果用户再次启动应用程序,它将返回主屏幕 - 任务堆栈清除并且他进入根主要活动


Chr*_*Orr 11

android:clearTaskOnLaunch提及该属性适用于"从主屏幕重新启动[活动]" 的文档.

但是,在您的情况下,您按下Home按钮返回主屏幕,而不是按下Back按钮.这意味着您的应用程序实际上并未重新启动,因为它MainAct没有"完成".只有当您按下Back(或者Android杀死任务以节省资源等)时才会发生这种情况.

由于您的应用程序中只有两个活动,您可以设置该android:noHistory属性MainAct,从而确保用户永远不会返回它并且必须通过LogonAct.

顺便说一句,强迫用户每次离开应用程序时都会重新登录(例如,当他们接到电话时),这似乎有点烦人.
您可以在应用程序的持久存储中保留具有超时的会话令牌,或者使用服务保持网络连接打开,如果这是您的应用程序的工作方式 - 当然这取决于您和您的要求.:)

  • 啊.在这种情况下,您可以在每个`Activity`的`onResume()`中添加一个快速方法调用,以检查某个时间段是否已经过去.如果是这样,那么调用`finish()`并激活一个`Intent`将它们发送回`LogonAct`. (3认同)