1

我在这里和互联网上看过很多stackoverflow......有几个类似的帖子,但他们建议的任何补救措施都对我不起作用......

我的活动为 A->B->C->D->E。当我进入活动E时,我有一个名为exit的按钮,按下它应该完全退出应用程序......或者甚至在活动E上按下后退键,它应该退出应用程序......我试过以下

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    { 
        this.finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

 public void onDestroy()
 {
        super.onDestroy();
        Toast.makeText(getApplicationContext(), "Thanks for using App.\nGood Bye", Toast.LENGTH_SHORT).show();


        //this.moveTaskToBack(true);
        //android.os.Process.killProcess(android.os.Process.myPid());
 }

并从 D 开始了我的活动 E

Intent myIntent = new Intent(Activity5.this, LastActivity.class); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(myIntent); 
finish();

但对我不起作用...只是活动 E 被杀死并且 D 重新弹出...我希望应用程序完全退出屏幕和正在运行的进程。

但我希望 A->D 在按下后退键时继续工作。就在使用到达E时,我想退出按钮单击或返回键...

任何帮助将不胜感激。

我也试过

android:launchMode="singleTop" 

在活动 A 但无济于事

4

2 回答 2

2

我发现这样做的一种方法是使用BroadcastReceiver. 当我有需要用户登录的活动时,我倾向于使用它。

我在基本活动中的字段如下:

public static final String ACTION_LOGOUT = "com.app.android.ACTION_LOGUT";

private static IntentFilter logoutIntentFilter = new IntentFilter(
        ACTION_LOGOUT);

private BroadcastReceiver logoutBroadcastReceiver = new BroadcastReceiver() {
    @Override public void onReceive(Context context, Intent intent) {
        Log.i("Closing activity due to logout: "
                + BaseLoggedActivity.this.getClass());
        finish();
    }
};

onCreate(基本活动的)方法中,我这样做:

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    registerReceiver(logoutBroadcastReceiver, logoutIntentFilter);
}

当我因为注销需要放弃所有活动时,我称之为:

    this.sendBroadcast(new Intent(BaseActivity.ACTION_LOGOUT));
    this.finish();

假设this是一个活动。它将向堆栈中的所有活动发送广播并让它们优雅地完成,即我在此示例中使用了基本活动,但您可以提供自定义 BroadcastReceiver,您可能希望在完成活动之前在其中处理某些事情。

于 2013-04-28T12:03:51.117 回答
1

您可以从 Activity E 中退出,只需覆盖后退按钮并返回主页(就像单击 Home Button 一样):

onBackPressed(){
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);
    finish();
}
于 2013-04-28T11:54:57.553 回答