Как Android onActivityForResult реагирует на переключение приложения между foregrnd и bckgrnd? - PullRequest
1 голос
/ 23 марта 2011

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

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();
     }

      ....
   }
 }
}

Шаги:

  1. Запуск родительского действия.
  2. Нажмите кнопку b1 на Родителе и запустите дочерний
  3. Ребенок успешно доставлен и отображается на экране
  4. Теперь нажмите кнопку «Домой» на устройстве Android (аппаратное обеспечение)
  5. Вызваны дочерние элементы onPause, onStop и onDestroy.

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

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

При возврате приложения на внешний вид Каково ожидаемое поведение с точки зрения жизненного цикла активности?

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

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

1 Ответ

1 голос
/ 23 марта 2011

Если вы удалите вызов метода finish () в onPause, то нажатие клавиши home вызывает только дочерние действия метода 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;
            }...
    });
...