杀掉前台活动

6
我正在编写一个应用程序,遇到了一个问题。我有三个活动A、B和C。当我从活动A到B,再从B到C时,如果我按设备上的菜单按钮,我的应用程序就会进入后台状态。当我重新打开应用程序时,它会显示活动C。我想要的是,当我重新打开应用程序时,它应该显示活动A,而不是来自活动堆栈中的任何其他活动。
我已经查看了一些活动生命周期方法并尝试重写它。我已经重写了onStart()、onPause()方法,并完成了Activity C以及Activity B,但我面临的问题是当我从Activity C到Activity D时,Activity C完成所有后台活动,我无法返回到Activity C。
有人能帮助我如何在应用程序恢复时显示特定的活动吗?
以下是我的manifest.xml:
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application    
              android:icon="@drawable/icon"
              android:label="@string/app_name"
              android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >

    <activity   
        android:label="@string/app_name"
        android:name="com.buttonpay.Login"
        android:screenOrientation="portrait"
        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=".ButtonPayActivity"
                android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                android:screenOrientation="portrait"/>    


    <!-- HomeTab Activity -->

            <activity android:name="com.buttonpay.home.Utilities"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>


            <activity android:name="com.buttonpay.home.Top_up"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>
            <activity android:name="com.buttonpay.home.HomeScreen"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>

            <activity android:name="com.buttonpay.home.MyAccount"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>
             <activity android:name="com.buttonpay.home.TransactionHistory"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>
              <activity android:name="com.buttonpay.home.TransactionDetailsActivity"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>
                <activity android:name="com.buttonpay.home.TransactionList"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>
               <activity android:name="com.buttonpay.home.BusinessSummaryActivity"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>
               <activity android:name=".home.MobileMoneyActivity"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>


     <!-- balance tab Activity -->
            <activity android:name="com.buttonpay.balance.BalanceTab"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        />



     <!-- Favouritetab Activity -->
             <activity android:name="com.buttonpay.favourite.FavouriteTab"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        />

  <!-- ComingSoon -->
<activity android:name="com.buttonpay.home.ComingSoon"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>

 <!-- Settings -->
<activity android:name="com.buttonpay.settings.SettingList"
                        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                        android:screenOrientation="portrait"/>



</application>


David的解决方案对你有用吗? - Android Killer
没有,David的解决方案不起作用。 我有登录活动、菜单活动和描述活动。当我按设备上的菜单按钮时,应用程序会最小化,当我重新打开应用程序时,它会显示描述活动。我希望登录活动应该被显示。 有什么帮助吗? - Nirav Bhandari
我已经在问题中添加了manifest.xml,请看一下。 - Nirav Bhandari
1个回答

3
在清单文件中,将此设置在您的根活动上(即在应用程序中首先启动的那个活动,具有ACTION_MAIN和CATEGORY_LAUNCHER):
android:clearTaskOnLaunch="true"

您不需要做任何其他事情,也不需要覆盖生命周期方法。

编辑 添加一些经验实验后的额外信息:

您需要确保您的根活动始终在任务的活动堆栈中才能使其正常工作。这意味着您不能在用户实际想要退出应用程序时(即当他在您的根活动中按下BACK键时),才调用finish()来结束根活动

在您的示例中,您有一个LoginActivity、MenuActivity和DescriptionActivity,其中LoginActivity是根活动。当LoginActivity启动MenuActivity时,它不能在自身上调用finish()。在这种情况下,当用户在MenuActivity中按下BACK键时,它将返回到LoginActivity。如果这不是您想要的结果,则需要在LoginActivity中设置一个标志,表示您已经启动了MenuActivity,当调用onResume()时,您可以检查该标志以确定是否从MenuActivity返回,在这种情况下,您可以立即调用finish()


无法工作... 我有登录活动、菜单活动和描述活动。当我按设备上的菜单按钮时,应用程序会最小化,当我重新打开应用程序时,它会显示描述活动。我希望登录活动应该被显示。 有什么帮助吗? - Nirav Bhandari
1
我创建了一个包含3个活动的小型测试程序:A、B和C。我为ActivityA设置了`android:clearTaskOnLaunch'。我启动了应用程序。ActivityA启动ActivityB,然后启动ActivityC。所有3个活动都在活动堆栈中。我按下HOME按钮。应用程序进入后台。我再次启动应用程序。我看到ActivityA。 - David Wasser
1
我想我现在明白问题了。你已经在登录活动中调用了 finish(),对吗?你需要确保你的活动作为第一个活动留在任务中。除非你想结束应用程序,否则不能在它上面调用finish() - David Wasser
1
我在我的回答中添加了一些额外的评论。很高兴能帮到你。下次尽量多一点耐心,这样你会得到更多的帮助。 - David Wasser
你们俩的回答都很好,我都点赞了... :) - Android Killer
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接