Как Android onActivityForResult реагирует на переключение приложения между foregrnd и bckgrnd?

1

Рассмотрим этот сценарий:

public class Parent extends Activity{

@Override
public void onCreate(Bundle icicle) {
     super.onCreate();
.......
}

  public void onResume(){
       super.onResume();
     ....
    onClick of BUTTON b1.....

        Intent intent = new Intent(Parent.this, Child.class);
    intent.putExtra("param", data);
     startActivityForResult(intent, ACTION_LAUNCH_CHILD_ACTIVITY);
     }

      ....
   }

  public void onActivityResult(){
    do something......
   }
 }
}

==========================================

public class Child extends Activity{

@Override
public void onCreate(Bundle icicle) {
    super.onCreate();
.......
}

  public void onPause(){
     super.onPause();
     setResult(OK);
     finsh();
     }

      ....
   }
 }
}

Шаги:

  • Запустить родительскую активность.
  • Нажмите кнопку b1 на родительском и запустить дочерний
  • Ребенок успешно завершен и отображается на экране
  • Теперь нажмите кнопку "Главная" на устройстве Android (аппаратное обеспечение).
  • Вызывается Child onPause, onStop и onDestroy.

Но я не вижу, чтобы программный элемент управления включал Parent onActivityResult, когда приложение было перенесено в backgrnd.

Где находится программный контроль для этого, когда приложение находится в фоновом режиме?

Принесите приложение обратно в foregrnd, каково ожидаемое поведение с точки зрения жизненного цикла активности?

Заранее спасибо

Может кто-нибудь объяснить это, пожалуйста.

Теги:
android-activity
activity-lifecycle
lifecycle

1 ответ

1
Лучший ответ

Если вы удалите вызов для завершения() в onPause, то нажатие домашнего ключа вызывает только дочерние действия onPause. При повторном запуске приложения вызывается только дочерний метод onResume. Кажется, что ни один из родительских методов не вызван. Шаблон вызова setResult в действии, а затем закончить в onPause FAILS после того, как пользователь изменит ориентацию телефона. Поэтому, если пользователь вводит данные, сохраняет данные (вызывая setResult в onSaveButtonClicked), меняет ориентацию телефона и выходит из завершения вызова, а изменения НЕ СОХРАНЯТСЯ.

Рассмотрим вызов finish() сразу после setResult в тот момент, когда у вас достаточно данных, чтобы установить результат, выходя из дочерней активности.

// UPDATE BUTTON HANDLER
    final Button buttonUpdate= (Button)findViewById(R.id.ButtonPasswordUpdate);
    buttonUpdate.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {   
            String password= editTextPasswordFirst.getText().toString();
            String verify= editTextPasswordSecond.getText().toString();  
            String err="";

            if (password.equals(verify) && (password.length() >= minimumPasswordLength)) { // 1) SUCCESS
                ResetTimeoutValues(timeoutType); // new password so calculate new timeout time     
                isValidKey= true;
                PasswordState outPasswordState= new PasswordState(lengthKey,
                        timeExpire,
                        isValidKey,
                        timeoutType,
                        password,
                        isHashPassword,
                        minimumPasswordLength);
                Bundle b= new Bundle();
                b.putSerializable("jalcomputing.confusetext.PasswordState", outPasswordState);
                getIntent().putExtras(b);
                setResult(RESULT_OK,getIntent());   // call home with data on success only
                finish(); // go back <=== EXITS Here
                return;
            }...
    });
  • 0
    Привет Джал, спасибо за объяснение. Согласно моему требованию, мне не нужно возвращать или сохранять какие-либо данные обратно в родительское действие. Цель: когда пользователь находится в дочерней активности .. приложение переводится в bckgrnd .... в следующий раз, когда приложение возвращается в foregrnd, я не хочу, чтобы моя дочерняя активность отображалась ... Я хочу видеть свою родительскую активность. Это требование. Есть ли лучший способ сделать этот поток другой, используя startActivityForResult?
  • 0
    @ Ах, не зная ваших точных требований, я могу только догадываться. Почему бы не запустить дочернюю активность в onCreate, скажем, только после полного уничтожения, и вызвать финиш в ChildActivity.onPause? Это отвечало бы требованиям, скажем, заставки, которая исчезает, когда пользователь нажимает клавишу Home, но возвращается, если пользователь нажимает клавишу возврата дважды.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню