java-如何以编程方式退出Android应用程序?
我确定已经多次询问了这个问题,因为我读了几次。 我的客户希望我在他的应用程序中放置一个按钮,用户可以单击并退出。 我已阅读此内容,发现致电Activity.moveTaskToBack(true)可以做到。 但是,完成只是关闭当前正在运行的活动吗? 我有很多活动,因此在这种情况下,我必须传递每个活动的实例并完成它们,或者使每个活动成为Singleton模式。
我也知道Activity.moveTaskToBack(true)可以带您进入主屏幕。 好的,这不是关闭,而是后台进程。 那么这有效吗?
我应使用哪种方法完全关闭应用程序? 上述任何方法或上述方法的任何其他方法/其他用法?
27个解决方案
55 votes
实际上,每个人都希望在onclick事件上关闭应用程序,无论它在哪里活动。
因此,伙计们的朋友们尝试这段代码。 将此代码放在onclick事件上
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
Fayaz answered 2019-10-11T05:39:05Z
39 votes
您可以调用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);
}
});
Anchit Mittal answered 2019-10-11T05:39:29Z
30 votes
如果要退出应用程序,请在按钮按下事件中使用以下代码:
public void onBackPressed() {
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
Pir Fahim Shah answered 2019-10-11T05:39:54Z
19 votes
@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();
}
Aditya_Android answered 2019-10-11T05:40:13Z
17 votes
太简单了。 使用System.exit(0);
Amon Olimov answered 2019-10-11T05:40:38Z
12 votes
实际上有两种可能的情况:
您可能要退出活动
或者您想退出应用程序
您可以使用以下代码退出活动:
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());
Kasun answered 2019-10-11T05:41:45Z
9 votes
从api 16开始,您可以使用finishAffinity方法,该方法似乎非常接近通过其名称和javadoc描述来关闭所有相关活动:
this.finishAffinity();
完成此活动以及当前任务中紧接其下的所有具有相同关联性的活动。 通常,当可以将应用程序启动到另一个任务上时(例如从它了解的内容类型的ACTION_VIEW启动),并且用户已使用向上导航键切换到当前任务并切换到自己的任务时,通常使用此方法。 在这种情况下,如果用户已导航到第二个应用程序的任何其他活动,则应将所有这些活动从原始任务中删除,作为任务切换的一部分。
请注意,完成此操作后,您无法将结果传递到上一个活动,如果尝试这样做,将引发异常。
从api 21开始,您可以使用非常相似的命令
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);
来源:如何以编程方式退出android应用程序
希望能帮助到你! 祝好运!
Shreshth Kharbanda answered 2019-10-11T05:42:54Z
5 votes
android.os.Process.killProcess(android.os.Process.myPid());
kathir answered 2019-10-11T05:43:13Z
5 votes
怎么样this.finishAffinity()
从文档中
完成此活动以及当前任务中紧接其下的所有具有相同关联性的活动。 通常,当可以将应用程序启动到另一个任务上时(例如从它了解的内容类型的ACTION_VIEW启动),并且用户已使用向上导航键切换到当前任务并切换到自己的任务时,通常使用此方法。 在这种情况下,如果用户已导航到第二个应用程序的任何其他活动,则应将所有这些活动从原始任务中删除,作为任务切换的一部分。 请注意,完成此操作后,您无法将结果传递到上一个活动,如果尝试这样做,将引发异常。
Akeshwar Jha answered 2019-10-11T05:43:52Z
3 votes
@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);
}
azeem khan answered 2019-10-11T05:44:10Z
3 votes
使用this.finishAffinity(); 在该按钮上而不是finish();如果不起作用,您还可以尝试在清单中添加android:noHistory =“ true”,然后通过uisng finish();完成活动。 或finishAffinity();
希望能帮助到你....:)
Yesha Shah answered 2019-10-11T05:44:42Z
2 votes
将此放入您的onClick中:
moveTaskToBack(true);
finish()
Stan Malcolm answered 2019-10-11T05:45:07Z
2 votes
在通话中尝试一下。 我有时在按钮的onClick中使用它。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
它不是关闭您的应用程序,而是打开仪表板,使您看起来像您的应用程序已关闭。
阅读此问题以更清楚android-退出应用程序代码
Rishiraj Purohit answered 2019-10-11T05:45:49Z
2 votes
这将清除Task(活动堆栈)并开始新的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);
Mahmood Ali answered 2019-10-11T05:46:13Z
2 votes
在Xamarin.Android中实现:
public override void OnBackPressed()
{
MoveTaskToBack(true);
Process.KillProcess(Process.MyPid());
Environment.Exit(1);
}
GONeale answered 2019-10-11T05:46:39Z
1 votes
在onCreate上用singletop和finish()调用的ghost活动应该可以解决问题
JesusS answered 2019-10-11T05:47:04Z
1 votes
它仅使用moveTaskToBack(true);即可工作
user3856297 answered 2019-10-11T05:47:30Z
1 votes
如果仍然有人想知道,对于Xamarin.Android(在我的情况下,也运行Monogame),Activity上的命令FinishAndRemoveTask()做得很好!
Konrad answered 2019-10-11T05:47:56Z
0 votes
只需在backpress中使用代码
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Sayooj answered 2019-10-11T05:48:21Z
0 votes
如果您在应用程序中使用EventBus(或实际上是任何其他发布/订阅库)在活动之间进行通信,则可以向它们发送显式事件:
final public class KillItWithFireEvent
{
public KillItWithFireEvent() {}
public static void send()
{
EventBus.getDefault().post(new KillItWithFireEvent());
}
}
唯一的缺点是您需要所有活动来侦听此事件以调用其自己的finish()。为此,您可以通过继承轻松创建shim活动类,而该继承仅侦听此事件并让子类实现其他所有内容,然后确保所有 活动从此额外层继承。 Kill侦听器甚至可以通过覆盖来添加一些额外的功能,例如避免在某些特定情况下死亡。
Grzegorz Adam Hankiewicz answered 2019-10-11T05:48:55Z
0 votes
代替System.exit(1)只需使用System.exit(0)
Kaze Tdr answered 2019-10-11T05:49:20Z
0 votes
要退出应用程序,只需运行以下两行
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
Hassnain Jamil answered 2019-10-11T05:49:47Z
0 votes
在片段中
getActivity()。finishAndRemoveTask();
在活动中
finishAndRemoveTask();
Rodrigo Givisiez answered 2019-10-11T05:50:32Z
0 votes
Just call these two Function
finish();
moveTaskToBack(true);
younes answered 2019-10-11T05:50:51Z
0 votes
只需添加此代码:-
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
Sandeep Malik answered 2019-10-11T05:51:16Z
-1 votes
如果同时使用完成和退出,则您的应用程序将完全关闭
完();
System.exit(0);
Abdullah alkış answered 2019-10-11T05:51:58Z
-1 votes
finish();
finishAffinity();
System.exit(0);
为我工作
prabhu answered 2019-10-11T05:52:20Z