活动堆栈问题

时间:2013-04-28 11:50:12

标签: android android-activity

我已经在这里看了很多堆栈流并在互联网上... 有几个类似的帖子,但他们建议的任何补救措施都不适合我...

我的活动为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但无效

3 个答案:

答案 0 :(得分: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,您可能希望在完成活动之前处理某些事情。 / p>

答案 1 :(得分:1)

您可以退出活动E,只需覆盖后退按钮并转到主页(如果您单击主页按钮):

onBackPressed(){
    Intent startMain = new Intent(Intent.ACTION_MAIN);
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(startMain);
    finish();
}

答案 2 :(得分:1)

您可以关注this link。在这里,您将获得管理活动堆栈的所有要点。