Как убить все действия в приложении Android?

Я хочу закрыть общее приложение в android, когда я нажимаю кнопку "НЕТ" в диалоговом окне. Я использовал следующий код.

protected Dialog onCreateDialog(int id) {
switch (id) {
    case 0:
      AlertDialog.Builder builder1 = new AlertDialog.Builder(this);

    builder1.setTitle("GASIMIZER");
    builder1.setCancelable(false)
    .setPositiveButton("YES",
    new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog,int which) {
           Intent i = new Intent(Finalpage.this,NewproActivity.class);
        startActivity(i);
     }
    })
    .setNegativeButton("NO",new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog,int which) 
       {
            quit();

    }
    });

    AlertDialog alert1 = builder1.create();
    alert1.show();
    break;

    }
    return null;
    }

    public void quit() {
        onDestroy();
    }

Пожалуйста, скажите мне, как я могу решить эту проблему.

Ответ 1

вы можете вызвать метод finish() в своей деятельности и программно вызвать домашний экран (имитировать домашнюю кнопку) следующим образом:

private void endApplication() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}

Ответ 2

Сделайте это немного просто. Предположим, у вас есть класс Constants.java, в который вы помещаете все свои повторно используемые константы приложения. В этом объявлении стека действий следующим образом:

public static ArrayList<WeakReference<Activity>> activity_stack=new ArrayList<WeakReference<Activity>>();
/**
 * Add the activity as weak reference to activity stack.
 * @param act
 */
public static void addToActivityStack(Activity act)
{
    WeakReference<Activity> ref = new WeakReference<Activity>(act);
    activity_stack.add(ref);

}

И всякий раз, когда вы создаете какую-то активность, в ней onCreate на последней строке вы помещаете что-то вроде этого:

Constants.addToActivityStack(this);

Теперь определите метод, подобный следующему в Constants.java

    /**
 * Kill all the activities on activity stack except act.
 * To kill all the passed parameter should be null.
 */
public static void killAllExcept(Activity act)
{
    for(WeakReference<Activity> ref:Global.activity_stack)
    {
        if(ref != null && ref.get() != null)
        {
            if(act != null && ref.get().equals(act)) 
            {
                continue;//dont finish this up.
            }
            ref.get().finish();
        }
    }
    activity_stack.clear();//but clear all the activity references
}

Теперь, когда вам нужно закончить все ваши действия, просто позвоните Constants.killAllExcept(null) или Constants.killAllExcept(this), если вы хотите сохранить эту активность.

Этот метод удобен, если вы хотите сохранить одно действие, но другие/если хотите, вы можете закончить их.

Ответ 3

Вы должны НЕ убить свои приложения. Вы должны позволить обработчику ActivityManager.

В частности, если вы хотите, чтобы пользователь оставил ваше приложение, отправьте их домой с помощью намерения на рабочий стол.

Ответ 4

Вы не должны называть onDestroy() самостоятельно.. вместо этого звоните finish(), чтобы закрыть Activity.

Метод жизненного цикла вызывающей активности сам по себе является плохой практикой (не знаю, возможно ли это). Они обрабатываются самой ОС Android.

Ответ 5

Следует подчеркнуть, что предложенный подход Constants.killAll() является плохим дизайном и будет использоваться при неправильном использовании утечек памяти. Сохранение статической ссылки на активность является наиболее распространенной причиной утечек памяти в Android.

Надеюсь, что это поможет.