как убить все действия в приложении для Android? - PullRequest
0 голосов
/ 24 февраля 2012

Я хочу закрыть общее приложение в 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();
    }

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

Ответы [ 5 ]

8 голосов
/ 18 января 2013

Давайте сделаем это немного проще. Предположим, у вас есть класс 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), если хотите сохранить это действие.

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

5 голосов
/ 24 февраля 2012

Вы можете вызвать метод 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);
}
1 голос
/ 24 февраля 2012

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

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

0 голосов
/ 20 февраля 2014

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

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

0 голосов
/ 24 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...