[英]How to finish an android application?
我需要完成一个android应用程序。 为此,我写道
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure You want to exit")
.setCancelable(false)
.setPositiveButton("YES"),
new DialogInterface.OnClickListener() {
// On
// clicking
// "Yes"
// button
public void onClick(DialogInterface dialog,int id) {
System.out.println(" onClick ");
closeApplication(); // Close Application method called
}
})
.setNegativeButton("NO"),
new DialogInterface.OnClickListener() {
// On
// clicking
// "No"
// button
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
private void closeApplication() {
System.out.println("closeApplication ");
this.finish();
}
}
但是,如果应用程序中没有完成任何活动,则当我尝试退出该应用程序时,该活动首先完成并且该应用程序没有退出..我尝试了2次退出此应用程序...我如何完成所有活动我需要退出时的应用程序...或者有什么方法可以完成整个应用程序
要关闭应用程序,只需调用:
android.os.Process.killProcess(android.os.Process.myPid());
否则,由于Android活动的特定生命周期,您不能确保该应用程序已关闭/被杀死。
每当您开始新活动时
myintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent);
并在清单文件中提及该活动为
<activity android:name=".<Activity Name>" >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
将其放入您的onClick
或onBackPressed
:
moveTaskToBack(true);
finish()
请先阅读Google Android Developer Advocate Reto Meier的这篇文章: 何时在Android Apps中添加退出按钮(提示:从不)
什么是要添加退出按钮的症状? 如果您需要清除活动堆栈并始终以特定的活动重新启动,则可能只需要使用以下属性调整活动清单声明即可: android:clearTaskOnLaunch
Android的制作方式使得几乎没有打开过的应用程序被关闭。
在误解该语句之前,请先理解这一点。
“每当您退出应用程序时,Android都会保存应用程序正在做的所有事情(称为其状态),并在后台将其推送到应用程序中,并调用onStop()方法。这是应用程序的新状态,此时该应用程序就是不会运行,但也不会从内存中清除。每当您再次启动应用程序时,它就会从冻结状态恢复。只有当保留冻结应用程序的内存开始变满时,Android GC才会清除应用”。
因此,从概念上讲,没有任何问题。 当您在第一个活动中点击“返回”按钮时,Android会将应用程序和数据捆绑在一起并冻结。
我有一个带有多个活动的应用程序。 我扩展了Application类,并包含了一个变量numActive。 初始化为0。在每个活动的onStart()中,numActive递增,在onStop()中,递减。 如果计数达到零,则用户完全离开了我的应用程序,并且我关闭了后台任务。
我发现NeTeInStEiN答案的无耻复制非常有用(请对他的答案进行投票): 以编程方式将正在运行的应用程序发送到后台
您可以使用以下任一方法:
boolean sentAppToBackground = moveTaskToBack(true);
if(!sentAppToBackground){
Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
this.startActivity(i);
}
此处的更多信息: http : //developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean)
或者简单地:
Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
this.startActivity(i);
Android Framework工程师Romain Guy表示:“您无法模拟Home键上的按下。” 所以要当心...
检查: http : //osdir.com/ml/Android-Developers/2010-03/msg01887.html
根据以下内容更新了此答案: moveTaskToBack(true)始终返回false
根据这个答案 ,
只需编写this.finishAffinity();
并做了!
要关闭应用程序,您也可以将“ System.exit(0)”设为标准0或使用任何退出代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.