如何以编程方式退出 Android 应用程序?

我相信这个问题已经被问过很多次了,因为我读过一些。我的客户希望我在他的应用程序中放一个按钮,用户可以点击并退出。我已经阅读了 这个,发现调用 finish()将做到这一点。但是,Finish 只是关闭当前正在运行的活动对吗?我有很多活动,所以在这种情况下,我必须传递每个活动的实例并完成它们,或者把每个活动变成单例模式。

我还知道 Activity.moveTaskToBack(true)可以让你进入主屏幕。好了,这不是结束,而是背景化过程。这有效吗?

我应该使用哪种方法来完全关闭应用程序?上述任何一种或任何其他方法/上述方法的其他用法?

307900 次浏览

在 onCreate 上用 singletop 和 Finish ()调用幽灵活动应该可以完成这个任务

android.os.Process.killProcess(android.os.Process.myPid());

可以调用 System.exit () ; 退出所有活动。

    submit=(Button)findViewById(R.id.submit);


submit.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);


}
});

太简单了,用 System.exit(0);

Accually there are two possible situations:

  1. 您可能希望退出该活动
  2. 或者希望从应用程序退出

您可以使用以下代码退出活动:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

但这不会杀死同一应用程序中的基础活动。 这只会使应用程序最小化。

如果要退出应用程序,请使用以下代码结束其进程:

android.os.Process.killProcess(android.os.Process.myPid());

用于单核细胞增多症的开发

process.KillProcess(Process.MyPid());

实际上,每个人都在寻找通过 onclick 事件关闭应用程序,无论哪里可能有活动..。

将此代码添加到 onclick 事件:

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
 @Override
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) {
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();
}

把这个放进你的 onClic:

moveTaskToBack(true);
finish()
 @Override
public void onBackPressed() {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}

如果要退出应用程序,请在按钮按下事件中使用以下代码:

public void onBackPressed() {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}

在电话上试试这个,我有时用它来点击一个按钮。

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

它不是关闭你的应用程序,而是打开仪表板,这样看起来你的应用程序是关闭的。

read this question for more clearity Android 退出应用程序代码

用你背压里的代码

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

它只使用 moveTaskToBack(true);

this.finishAffinity()

医生说,

完成此活动以及当前任务中紧接其下的具有相同关联的所有活动。这通常用于当一个应用程序可以启动到另一个任务(例如从它所理解的内容类型的 ACTION _ VIEW) ,并且用户已经使用了向上导航来切换到自己的任务。在这种情况下,如果用户已经导航到第二个应用程序的任何其他活动,那么应该将所有这些活动作为任务切换的一部分从原始任务中删除。 请注意,此完成不允许您将结果交付给前面的活动,如果您试图这样做,将引发异常。

在 API 16中发布的 finishAffinity 方法关闭了所有正在进行的活动并关闭了应用程序:

this.finishAffinity();

完成此活动以及当前任务中紧接其下的具有相同关联的所有活动。这通常用于当一个应用程序可以启动到另一个任务(例如从它所理解的内容类型的 ACTION _ VIEW) ,并且用户已经使用了向上导航来切换到自己的任务。在这种情况下,如果用户已经导航到第二个应用程序的任何其他活动,那么应该将所有这些活动作为任务切换的一部分从原始任务中删除。

Note that this finish does not allow you to deliver results to the previous activity, and an exception will be thrown if you are trying to do so.


Since API 21, you can use:

finishAndRemoveTask();

完成此任务中的所有活动并将其从最近的任务列表中删除。

备选方案:

getActivity().finish();
System.exit(0);


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

Source: 如何以编程方式退出 android 应用程序


希望能帮上忙,祝你好运!

如果你在应用程序中使用 活动巴士(或者任何其他发布/订阅库)来在活动之间进行通信,你可以向它们发送一个明确的事件:

final public class KillItWithFireEvent
{
public KillItWithFireEvent() {}


public static void send()
{
EventBus.getDefault().post(new KillItWithFireEvent());
}
}

这样做的唯一缺点是,您需要所有的活动来监听这个事件,以调用它们自己的 finish()。为此,您可以轻松地通过继承创建 shim活动类,它只是监听这个事件,并让子类实现其他所有内容,然后确保所有活动都从这个额外的层继承。死亡侦听器甚至可以通过覆盖增加一些额外的功能,比如在某些特定情况下避免死亡。

this will clear Task(stack of activities) and begin new Task

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);

如果您使用完成和退出您的应用程序将完全关闭

finish();

出口(0) ;

使用 System.exit (0)代替 System.exit (1)

当您想退出应用程序时,只需运行以下两行

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

在那个按钮上使用 this.finishAffinity () ; 而不是 Finish () ; 如果它不工作,那么您也可以尝试添加 android: noHistory = “ true”在您的清单中,然后通过使用 Finish ()或 finishAffinity ()来完成您的活动;

希望能有所帮助... ... :)

在 Xamarin 实现安卓:

    public override void OnBackPressed()
{
MoveTaskToBack(true);
Process.KillProcess(Process.MyPid());
Environment.Exit(1);
}
finish();
finishAffinity();
System.exit(0);

对我有用

如果有人仍然想知道,对于 Xamarin 机器人(在我的情况下也运行在它上面的 Monogame) ,命令 Activity上的 FinishAndRemoveTask()可以很好地完成工作!

在碎片里

GetActivity () . finishAndRemoveTask () ;

在活动中

FinishAndRemoveTask () ;

只要调用这两个函数

 finish();
moveTaskToBack(true);

这么说吧:

finishAffinity();

将此方法链接到退出/退出按钮

public void quitGame(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
finishAndRemoveTask();
} else {
finish();
}
}
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
System.exit(1);

使用这个代码非常有用,你可以退出所有的活动。

这个可以的,我也试过了。

this.finishAffinity();

In Fragment use getActivity().finishAffinity(); and clear fragment binding without memory leaks