199

我有一个应用程序,在主页上有用于导航应用程序的按钮。

在该页面上,我有一个“退出”按钮,单击该按钮应将用户带到应用程序图标所在的手机主屏幕。

我怎样才能做到这一点?

4

22 回答 22

331

Android 的设计不支持选择退出应用程序,而是由操作系统管理它。您可以通过其相应的 Intent 调出 Home 应用程序:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
于 2010-07-12T08:00:51.427 回答
74

也许你可以尝试这样的事情

假设在我们的应用程序中,我们有许多活动(比如十个),我们需要直接退出这个活动。我们可以做的是,创建一个意图并转到根活动并将意图中的标志设置为

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

另外,在意图中添加一些额外的布尔值

intent.putExtra("EXIT", true);

然后在根活动中,boolean根据该调用完成()检查和的值,在onCreate()根活动的

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
于 2012-03-16T10:23:39.823 回答
31
System.exit(0);

可能是您正在寻找的。它将关闭整个应用程序并将您带到主屏幕。

于 2012-05-14T12:48:07.017 回答
25

这对我很有效。
关闭所有之前的活动如下:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

然后在 MainActivity onCreate() 方法中添加这个来完成 MainActivity

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
于 2013-04-11T00:57:32.440 回答
23

首先使用方法完成您的应用程序finish();

然后在 onDestroy 中添加以下行以移除强制关闭

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
于 2012-11-05T14:06:47.647 回答
20

如果你想结束一个活动,你可以简单地调用finish(). 然而,在屏幕上有一个退出按钮是不好的做法。

于 2010-07-12T09:18:16.607 回答
17

有些活动实际上你不想在按下后退按钮时再次打开,例如启动屏幕活动、欢迎屏幕活动、确认窗口。实际上,您在活动堆栈中不需要这个。您可以使用=> 打开 manifest.xml 文件并添加一个属性来执行此操作

机器人:noHistory =“真”

到这些活动。

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

或者

有时您想在某些后退按钮按下时关闭整个应用程序。这里的最佳做法是打开主窗口而不是退出应用程序。为此,您需要覆盖 onBackPressed() 方法。通常这种方法会打开堆栈中的顶部活动。

@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

或者

在按下后退按钮时,您想退出该活动,并且您也不想将其添加到活动堆栈中。在 onBackPressed() 方法中调用 finish() 方法。它不会关闭整个应用程序。它将用于堆栈中的前一个活动。

@Override
public void onBackPressed() {
  finish();
}
于 2014-04-10T09:10:24.460 回答
16

不建议退出您的 Android 应用程序。有关更多详细信息,请参阅此问题

用户始终可以通过主页按钮或在第一个活动中通过后退按钮退出您的应用程序。

于 2010-07-12T07:16:38.610 回答
5

(我尝试了以前的答案,但它们在某些方面有所欠缺。例如,如果您在完成活动后不执行操作return;,则剩余的活动代码将运行。您还需要编辑 onCreate 并返回。如果您不运行 super.onCreate()你会得到一个运行时错误)

说你有MainActivityChildActivity

在 ChildActivity 里面添加这个:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

在 MainActivity 的 onCreate 中添加:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
于 2014-01-16T22:40:21.560 回答
4

还有另一种选择,使用 FinishAffinity 方法关闭堆栈中与应用程序相关的所有任务。

请参阅: https ://stackoverflow.com/a/27765687/1984636

于 2015-11-20T10:40:09.497 回答
3

当您调用该活动的完成 onDestroy() 时,它将被调用,它将返回到活动堆栈中的前一个活动......所以..退出时不要调用完成();

于 2012-03-08T05:09:02.870 回答
3

这是我所做的:

SomeActivity.java

 @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }

QuitAppActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      finish();
}

基本上你所做的是从堆栈中清除所有活动并启动QuitAppActivity,这将完成任务。

于 2017-01-04T11:33:28.957 回答
1

您只需添加moveTaskToBack(true)退出按钮onClickedListener即可最小化应用程序。

希望能帮助到你。

于 2019-12-04T06:47:02.673 回答
0

finish();在in之后添加以下行onDestroy()

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
于 2012-12-31T17:44:26.060 回答
0

我尝试使用以下代码片段退出应用程序,这对我有用。希望这对您有所帮助。我做了 2 个活动的小演示

第一项活动

public class MainActivity extends Activity implements OnClickListener{
    private Button secondActivityBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
        secondActivityBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();

        if(pref.getInt("exitApp", 0) == 1){
            editer.putInt("exitApp", 0);
            editer.commit();
            finish();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.SecondActivityBtn:
            Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }
}

您的任何其他活动

public class YourAnyActivity extends Activity implements OnClickListener {
    private Button exitAppBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_any);

        exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
        exitAppBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.exitAppBtn:
            Intent main_intent = new Intent(YourAnyActivity.this,
                    MainActivity.class);
            main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main_intent);
            editer.putInt("exitApp",1);
            editer.commit();
            break;
        default:
            break;
        }
    }
}
于 2013-03-26T17:32:05.950 回答
0

我用观察者模式做到了。

观察者界面

public interface Observer {
public void update(Subject subject);
}

基础学科

public class Subject {
private List<Observer> observers = new ArrayList<Observer>();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}

Child Subject 实现了退出方法

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

MyApplication 你的应用程序应该扩展它

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

基础活动

public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}

让我们测试一下

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}
于 2013-05-02T07:27:42.780 回答
0

如果您想退出应用程序,请将此代码放在您的函数下

public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}
于 2017-05-26T18:48:57.557 回答
0

100% 工作正常。这是退出您的应用程序 onClick(方法)的代码

    Button exit = (Button)findViewById(R.id.exitbutton);

    exit.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            finish();
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
            Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();

        }
    });
于 2018-06-19T12:54:54.710 回答
0

也许我的代码可以帮助(Main_Activity.java):

    @Override
    protected void onDestroy() {
        super.onDestroy();
        this.finish();
        exit(0);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        switch(keyCode)    {
            case KeyEvent.KEYCODE_BACK:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("My application").setMessage("Keep playing?").setIcon(R.drawable.icon);
                // Go to backgroung
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { moveTaskToBack(true); }
                });
                // Exit from app calling protected void onDestroy()
                builder.setNegativeButton("CLOSE APPLICATION", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { onDestroy(); }
                });
                // Close this dialog
                builder.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { dialog.cancel(); }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
                return true;
        }
        return false;
    }
于 2019-12-21T23:39:56.370 回答
0

这是最简单的

finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);

这将关闭应用程序,并且不会破坏方法服务,此任务将完成。

于 2021-10-23T16:03:51.963 回答
0

您可以使用finish(); moveTaskToBack(true);System.exit(1);退出您的应用程序。

public void onBackPressed() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setTitle("Exit Application?");
    alertDialogBuilder
            .setMessage("Click yes to exit!")
            .setCancelable(false)
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            finish();
                            moveTaskToBack(true);
                            android.os.Process.killProcess(android.os.Process.myPid());
                            System.exit(1);
                        }
                    })

            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();
                }
            });

    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}
于 2022-01-31T13:06:55.840 回答
-2

如果您想退出您的应用程序。然后在您的按钮按下事件中使用此代码。 像:

public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}
于 2015-09-14T18:36:32.173 回答