There are many question regarding this topic but there is no clear answer. Although android's memory management is very solid, so many people believe that we shouldn't kill android application. My case is different. I want an option to close an application. I found following code for closing application but sometimes it doesn't work.It seems application just refreshing itself when i hit exit button on my application.
关于这个话题有很多问题,但是没有明确的答案。虽然android的内存管理非常稳健,但是很多人认为我们不应该扼杀android应用。我的情况是不同的。我想要一个关闭应用程序的选项。我找到了关闭应用程序的代码,但有时它不能工作。当我在我的应用程序上点击exit按钮时,它似乎只是在刷新自己。
MainActivity.java
MainActivity.java
@Override
public void onDestroy()
{
super.onDestroy();
/*
* Notify the system to finalize and collect all objects of the
* application on exit so that the process running the application can
* be killed by the system without causing issues. NOTE: If this is set
* to true then the process will not be killed until all of its threads
* have closed.
*/
System.runFinalizersOnExit(true);
/*
* Force the system to close the application down completely instead of
* retaining it in the background. The process that runs the application
* will be killed. The application will be completely created as a new
* application in a new process if the user starts the application
* again.
*/
System.exit(0);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case R.id.close:
Intent intentFinish = new Intent(this, FinishActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentFinish);
finish();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
FinishActivity.java
FinishActivity.java
package com.mypackage;
import android.app.Activity;
import android.os.Bundle;
public class FinishActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
finish();
}
}
I also tried Process.killProcess(Process.myPid());
but it doesn't work.
我也试过Process.killProcess(Process.myPid());但它不工作。
6 个解决方案
#1
26
I found my solution. Use this to close an application
我发现我的解决方案。使用此命令关闭应用程序
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
#2
5
public void endTask() {
// Is the user running Lollipop or above?
if (Build.VERSION.SDK_INT >= 21) {
// If yes, run the fancy new function to end the app and
// remove it from the task list.
finishAndRemoveTask();
} else {
// If not, then just end the app without removing it from
// the task list.
finish();
}
}
#3
4
you have used System.exit(0);
, I would like suggest you not to use it. It is not a good programming style to use it. There is a method called finish();
in Activity to finish any Activity's Execution. You should use it.
你已经使用system . exit(0);,我建议你不要用它。使用它不是一种好的编程风格。有一个方法叫做finish();在活动中完成任何活动的执行。你应该使用它。
Process.killProcess(Process.myPID());
is also not preferable to use.
Process.killProcess(Process.myPID());也不可取。
#4
1
If you want to exit from an activity use finish() method of the activity, as Lucifer has suggested. It will simply finish the current activity. But if you want to exit from application(destroy all the activities upto Home Screen) use following Block of Code:
如果您想从活动中退出,请使用活动的finish()方法,正如Lucifer所建议的那样。它将简单地完成当前活动。但是,如果您想退出应用程序(销毁所有指向主屏幕的活动),请使用以下代码块:
Intent intent=new Intent(this, HomeClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
#5
1
switch(item.getItemId()) {
case R.id.close:
Intent intentFinish = new Intent(this,FinishActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentFinish);
finish();
return true;
}
why are you calling an activity which finishes itself (FinishActivity), then call finish() on the current activity (MainActivity) - whatever, the finish in the main activity is pointless.
为什么要调用一个完成了自己的活动(FinishActivity),然后调用当前活动(MainActivity)上的finish()——不管怎样,主活动中的finish没有意义。
#6
0
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
finish();
return true;
}
else{
return super.onKeyUp(keyCode, event);
}
}
use the above method in the very first activity that is launched on app start up
在应用程序启动时启动的第一个活动中使用上面的方法。
#1
26
I found my solution. Use this to close an application
我发现我的解决方案。使用此命令关闭应用程序
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
#2
5
public void endTask() {
// Is the user running Lollipop or above?
if (Build.VERSION.SDK_INT >= 21) {
// If yes, run the fancy new function to end the app and
// remove it from the task list.
finishAndRemoveTask();
} else {
// If not, then just end the app without removing it from
// the task list.
finish();
}
}
#3
4
you have used System.exit(0);
, I would like suggest you not to use it. It is not a good programming style to use it. There is a method called finish();
in Activity to finish any Activity's Execution. You should use it.
你已经使用system . exit(0);,我建议你不要用它。使用它不是一种好的编程风格。有一个方法叫做finish();在活动中完成任何活动的执行。你应该使用它。
Process.killProcess(Process.myPID());
is also not preferable to use.
Process.killProcess(Process.myPID());也不可取。
#4
1
If you want to exit from an activity use finish() method of the activity, as Lucifer has suggested. It will simply finish the current activity. But if you want to exit from application(destroy all the activities upto Home Screen) use following Block of Code:
如果您想从活动中退出,请使用活动的finish()方法,正如Lucifer所建议的那样。它将简单地完成当前活动。但是,如果您想退出应用程序(销毁所有指向主屏幕的活动),请使用以下代码块:
Intent intent=new Intent(this, HomeClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
#5
1
switch(item.getItemId()) {
case R.id.close:
Intent intentFinish = new Intent(this,FinishActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentFinish);
finish();
return true;
}
why are you calling an activity which finishes itself (FinishActivity), then call finish() on the current activity (MainActivity) - whatever, the finish in the main activity is pointless.
为什么要调用一个完成了自己的活动(FinishActivity),然后调用当前活动(MainActivity)上的finish()——不管怎样,主活动中的finish没有意义。
#6
0
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
finish();
return true;
}
else{
return super.onKeyUp(keyCode, event);
}
}
use the above method in the very first activity that is launched on app start up
在应用程序启动时启动的第一个活动中使用上面的方法。