退出Android应用

时间:2013-02-28 08:39:15

标签: android android-activity android-lifecycle

假设我有A-> B-> C-> D活动。 我想永远退出C onBackPressed()

如何在这种情况下退出应用程序。我试过FLAG_ACTIVITY_CLEAR_TOP但没有成功。

我的最低SDK为API 8

8 个答案:

答案 0 :(得分:3)

使用此代码。

@Override
    public void onBackPressed()
    {
        // TODO Auto-generated method stub
        super.onBackPressed();
        finish();
        Intent startMain = new Intent(Intent.ACTION_MAIN);
        startMain.addCategory(Intent.CATEGORY_HOME);
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(startMain);
    }

答案 1 :(得分:1)

public void AppExit()
{

    this.finish();
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

    /*int pid = android.os.Process.myPid();=====> use this if you want to kill your activity. But its not a good one to do.
    android.os.Process.killProcess(pid);*/

}

单击back按钮

时调用此方法

答案 2 :(得分:1)

如果你只想在C中退出onBackPressed(),那么你所要做的就是通过这样做覆盖活动A,B和D中的onBackPressed()

@Override
public void onBackPressed()
{
    // TODO Auto-generated method stub
}

这将确保在A,B和D中按下后退键时,应用程序不会关闭。您不需要在活动C中覆盖onBackPressed(),因为默认情况下Android调用finish()。但是,如果要弹出警报对话框,则可以执行以下操作 -

@Override
public void onBackPressed()
{
 // TODO Auto-generated method stub
AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
            alertbox.setTitle("Are you sure you want to exit the application");
            alertbox.setCancelable(false);
            alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    // TODO Auto-generated method stub
                    finish();
                }
            });

            alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                }
            });

            alertbox.show();
}

最后要注意,当您尝试在C中完成活动时,先前的活动会关闭,您应该在开始新活动时调用finish()。

答案 3 :(得分:1)

试试这个: - 在活动A中,

    startActivity(new Intent("B"),request_code);

在onActivityResult()函数中,

public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == request_code) 
        {
            if(resultCode == RESULT_OK)
            {
                finish();
            }
        }
    }

现在在活动B中,

startActivity(new Intent("C"),request_code);


public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == request_code) 
        {
            if(resultCode == RESULT_OK)
            {
                setResult(RESULT_OK);
                finish();
            }
        }
    }

最后在活动C中,

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

答案 4 :(得分:0)

您可以覆盖Activity C中后退按钮的功能,并退出应用程序(如果已按下)。试试这个: -

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { //Back key pressed
       //To Do - Exit App in your case
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

答案 5 :(得分:0)

您好,您可以在您要退出的活动中添加此代码

@Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle("Exit")
    .setMessage("Are you sure you want to close this APP ")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();    
        }

    })
    .setNegativeButton("No", null)
    .show();
}

否则您可以参考此Post

答案 6 :(得分:0)

它已经有了发布时间:

http://developer.android.com/intl/es/reference/android/app/Activity.html

this.FinishAffinity();

答案 7 :(得分:0)

使用方法finish();

完成current_activity

然后在current_activity的onDestroy中添加以下行以删除强制关闭

@Override
public void onDestroy()
{
    android.os.Process.killProcess(android.os.Process.myPid());
    super.onDestroy();
}