Должен ли я всегда заканчивать одно действие, прежде чем переходить к другому?

Вы всегда вызываете finish() для какой-то активности, прежде чем перейти к другой активности?

Например, чтобы предотвратить переход пользователя к предыдущему действию с помощью кнопки «Назад» на мобильном устройстве, некоторые люди предлагают завершить все действия, кроме основного. Таким образом, кнопка «Назад» всегда возвращает вас к основному действию (или к любому другому действию, по которому, по вашему мнению, должен перемещаться пользователь). Это делается путем переопределения поведения кнопки «Назад».

Плохо то, что из обработчика запускается диалоговое окно, которое пытается запуститься после завершения действия (http://dimitar.me/android-displaying-dialogs-from-background-threads/).

Каково ваше правило в этом вопросе? Вызвать finish() более разумным способом или переопределить кнопку «Назад», чтобы направить пользователя на страницу по вашему выбору?


person sandalone    schedule 02.11.2011    source источник


Ответы (3)


Если вы понимаете рабочий процесс приложения для Android, не должно быть необходимости переопределять кнопку «Назад» (за исключением некоторых особых случаев, таких как, например, Игры).

Если вы не хотите, чтобы пользователь возвращался к предыдущему действию, завершите его. Для этого не должно быть необходимости переопределять кнопку «Назад».

public class Activity1 extends Activity{

    // Some onclick-Handler
    public void onButtonClick(View v){
        Intent i = new Intent(this, Activity2.class);
        this.startActivity(i);
        // Don't want you to return:
        this.finish();
    }
}
person Lukas Knuth    schedule 02.11.2011
comment
Но если пользователь нажимает кнопку «Назад» в действии A и переходит к действию B, то действие A остается активным, верно? Где вы предлагаете заканчивать действие А в таких случаях? onPause или где-то еще? - person sandalone; 02.11.2011
comment
В этом случае вы закончите его onStop()-методом. - person Lukas Knuth; 02.11.2011

Если вы не хотите, чтобы кнопка «Назад» переходила к текущему действию, нажмите «Назад», чтобы завершить действие.

Если у вас открыто диалоговое окно, переопределите метод onPause действия и закройте диалоговое окно. onPause будет вызываться, когда активность уходит за пределы экрана.

Мы переопределяем метод onBackPressed только тогда, когда нам нужно сделать что-то конкретное, иначе в обычных случаях мы просто оставляем его.

person blessenm    schedule 02.11.2011
comment
Я не понимаю. Зачем переопределять onPause, когда я могу иметь кнопку в диалоговом окне и вызывать dialog.dismiss()? - person sandalone; 02.11.2011
comment
бывают ситуации, когда пользователь может выйти из действия, например, нажав кнопку «Домой» или уведомление. В этих случаях вы можете скрыть диалог в методе onPause. - person blessenm; 02.11.2011
comment
Вы говорите о диалоге как о части действия, поскольку он также скрыт, когда вы нажимаете кнопку «Домой». - person sandalone; 03.11.2011

Если вы хотите открыть другое действие и завершить предыдущее действие, используйте метод finish(); функция после вызова намерения другого действия.

он завершит текущее действие и откроет новое действие.

person dilipkaklotar    schedule 02.11.2011