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

时间:2010-01-25 08:53:31

标签: 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>

我正在使用1.5。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:15)

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

@Override
public void onBackPressed(){
    moveTaskToBack(true);
}

所以如果用户按下 - 它会回到主屏幕 如果用户再次启动应用程序 - 任务堆栈清除,他进入根主要活动

答案 1 :(得分:11)

android:clearTaskOnLaunch的文档提到,只要从主屏幕重新启动[活动],此属性就适用。“

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

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

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