从Backstack中完全删除应用程序

时间:2016-01-13 07:09:03

标签: android android-activity

任务

我应该连接我在android中创建的两个应用程序。让我们称其中一个A(活动A1,A2,A3)和B(活动B1,B2,B3)。用户将从应用程序A登录,并将被重定向到应用程序B.在应用程序B中,用户可以在活动之间跳转。完成后,他将按应用程序B中的LOGOUT,并将重定向到应用程序A. 这样做,我希望从Backstack中清除应用程序B.

问题
即使在注销时我正在完成堆栈中的所有活动,仍然会在后台堆栈中提到应用程序名称B.

到目前为止我取得的成就
这是我从应用程序A调用应用程序B的方法

    Intent intent= new Intent(Intent.ACTION_MAIN);
   intent.setComponent(new ComponentName("appB", "appB.MainActivity"));
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra(ARG_G2G_ACCESS_TOKEN, mTokenResponse.getAccessToken());

                startActivity(intent);

注销后,这就是我再次调用应用程序A的方式。首先,我完成了Task中运行的所有活动。然后我做

        Intent intent = new Intent(Intent.ACTION_MAIN);

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.setComponent(new ComponentName("appA", "appA.MainActivity"));

然而,即使使用上述应用程序应用程序B仍然在Backstack中提到。我希望在从A发布B时将其删除。

由于

2 个答案:

答案 0 :(得分:2)

根据您的问题,您可以添加finish ()

或使用android:noHistory="true"

finish () 在您的活动完成后调用此应该关闭。

Intent intent= new Intent(Intent.ACTION_MAIN);
                .....
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                .........

                startActivity(intent);
                finish();

您可以访问 How to finish current activity in Android 。希望这有帮助。

答案 1 :(得分:1)

卢克在下面的链接中查看答案:
Close application and remove from recent apps/

<activity
    android:name="com.example.ExitActivity"
    android:theme="@android:style/Theme.NoDisplay"
    android:autoRemoveFromRecents="true"/>
enter code here

然后创建一个类ExitActivity.java:

public class ExitActivity extends Activity
{
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        if(android.os.Build.VERSION.SDK_INT >= 21)
        {
            finishAndRemoveTask();
        }
        else
        {
            finish();
        }
    }

    public static void exitApplication(Context context)
    {
        Intent intent = new Intent(context, ExitActivity.class);

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

        context.startActivity(intent);
    }
}