我的应用程序有以下流程屏幕:

主屏->屏1->屏2->屏3->屏4->屏5

现在我在每个屏幕上都有一个公共注销按钮

(主屏/ 1屏/ 2屏/ 3屏/ 4屏/ 5屏)

我想当用户点击注销按钮(从任何屏幕),所有屏幕将完成,一个新的屏幕登录将打开。

我已经尝试了几乎所有的FLAG_ACTIVITY来实现这一点。 我还通过一些答案在stackoverflow,但不能解决这个问题。 我的应用程序是在Android 1.6上,所以不能使用FLAG_ACTIVITY_CLEAR_TASK

有什么办法解决这个问题吗?


当前回答

如果你的应用程序拥有最低sdk版本16,那么你可以使用finishAffinity()

完成此活动以及当前任务中紧接在其下面的具有相同关联的所有活动。

这是我的工作在顶部支付屏幕删除所有后台活动,

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29

其他回答

我试了我这边的旗子,还是没用。我有一个设计非常相似的应用程序,我有一个可能的解决方案在逻辑方面。我已经使用共享首选项构建了登录和注销。

如果我登出,数据在我的共享首选项被销毁/删除。

从我的任何活动(如Home.java)中,我检查共享首选项是否有数据,在这种情况下,它不会有数据,因为我从其中一个屏幕注销时销毁了它。因此,逻辑破坏/完成该活动,并将我带回Login活动。您可以在所有其他活动中复制此逻辑。

但是,请记住在onPostResume()中执行这个检查,因为这是当你返回Home.java时调用的

代码示例如下:

@Override
protected void onPostResume() {
    SharedPreferences pref = this.getSharedPreferences("user_details", Context.MODE_PRIVATE);
    if (pref.getAll().isEmpty()){
        //Shared Preferences has no data.
        //The data has been deleted
        Intent intent = new Intent(getApplicationContext(), Login.class);
        startActivity(intent);
        finish();
        //Finish destroys that activity which in our case is the Home.java
    }


    super.onPostResume();
}

登录->主界面->界面1->界面2->界面3->界面4->界面5 .单击“确定”

在屏幕4(或任何其他)-> StartActivity(登录)与FLAG_ACTIVITY_CLEAR_TOP

如果您在屏幕1中登录用户,然后从那里转到其他屏幕,请使用

Intent intent = new Intent(this, Screen1.class);
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

在启动你的新活动之前,只需添加以下代码:

finishAffinity();

或者如果你想让它在以前的Android版本中工作:

ActivityCompat.finishAffinity(this);

如果你的应用程序拥有最低sdk版本16,那么你可以使用finishAffinity()

完成此活动以及当前任务中紧接在其下面的具有相同关联的所有活动。

这是我的工作在顶部支付屏幕删除所有后台活动,

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29