关于这个话题有很多问题,但没有明确的答案。虽然android的内存管理非常扎实,但很多人认为我们不应该杀掉android应用程序。我的情况不同。我想要一个关闭应用程序的选项。我找到了关闭应用程序的以下代码,但有时它不起作用。当我点击我的应用程序上的退出按钮时,应用程序似乎只是刷新了自己。
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
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();
}
}
我也试过Process.killProcess(Process.myPid());
,但它不起作用。
答案 0 :(得分:31)
我找到了解决方案。用它来关闭一个应用程序
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
答案 1 :(得分:8)
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();
}
}
答案 2 :(得分:4)
您使用过System.exit(0);
,我建议您不要使用它。使用它并不是一种好的编程风格。在Activity中有一个名为finish();
的方法来完成任何Activity的执行。你应该使用它。
Process.killProcess(Process.myPID());
也不适合使用。
答案 3 :(得分:1)
如果你想退出活动,请使用活动的finish()方法,正如路西法建议的那样。它只会完成当前的活动。但是如果你想退出应用程序(销毁所有活动到主屏幕),请使用下面的代码块:
Intent intent=new Intent(this, HomeClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
答案 4 :(得分: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;
}
为什么要调用自己完成的活动(FinishActivity),然后在当前活动(MainActivity)上调用finish() - 无论如何,主要活动中的结束是毫无意义的。
答案 5 :(得分: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);
}
}
在应用启动时启动的第一个活动中使用上述方法