Как закрыть приложение для Android? - PullRequest
12 голосов
/ 02 апреля 2012

Есть много вопросов по этой теме, но нет четкого ответа. Хотя управление памятью в 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());, но это не работает.

Ответы [ 6 ]

31 голосов
/ 07 апреля 2012

Я нашел свое решение.Используйте это, чтобы закрыть приложение

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
8 голосов
/ 11 февраля 2015
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();
    }
}
4 голосов
/ 02 апреля 2012

вы использовали System.exit(0);, я хотел бы предложить вам не использовать его. Это не хороший стиль программирования, чтобы использовать это. В Activity есть метод с именем finish();, чтобы завершить выполнение любого действия. Вы должны использовать это.

Process.killProcess(Process.myPID()); также не является предпочтительным для использования.

1 голос
/ 02 апреля 2012
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), а затем вызываете finish () для текущего действия (MainActivity) - что угодно, завершение основного действия не имеет смысла.

1 голос
/ 02 апреля 2012

Если вы хотите выйти из действия, используйте метод завершения (), как предложил Люцифер. Это просто завершит текущую деятельность. Но если вы хотите выйти из приложения (уничтожить все действия на главном экране), используйте следующий блок кода:

Intent intent=new Intent(this, HomeClass.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
0 голосов
/ 02 апреля 2012
@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);
        }
    }

используйте вышеуказанный метод в самом первом действии, которое запускается при запуске приложения

...