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

      ....
   }
 }
}

手順:

  1. 親アクティビティを起動します。
  2. 親のボタン b1 をクリックし、子を起動します
  3. 子供は無事に連れてこられ、画面に表示されます
  4. Androidデバイス(ハードウェア)のホームボタンを押します
  5. 子の onPause、onStop、および onDestroy が呼び出されます。

しかし、アプリがバックグラウンドに移動したときに、プログラム コントロールが親の onActivityResult に入ることはありません。

アプリがバックグラウンド ステータスの場合、この特定のプログラム コントロールはどこにありますか?

アプリを最前面に戻すと、アクティビティのライフ サイクルに関して予想される動作は何ですか?

前もって感謝します

誰でもこれについて説明できますか。

4

1 に答える 1

1

onPause で finish() の呼び出しを削除すると、ホーム キーを押すと、子アクティビティの onPause メソッドのみが呼び出されます。アプリを再起動すると、子アクティビティの onResume メソッドのみが呼び出されます。親メソッドはどれも呼び出されていないようです。ユーザーが電話の向きを変更した後、アクティビティで setResult を呼び出してから onPause FAILS で終了するパターン。したがって、ユーザーがデータを入力し、データを保存し (onSaveButtonClicked で setResult を呼び出す)、電話の向きを変更し、finish の呼び出しを終了すると、変更は保存されません。

結果を設定するのに十分なデータがある時点で setResult の直後に finish() を呼び出し、子アクティビティを終了することを検討してください。

// 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;
            }...
    });
于 2011-03-23T02:03:18.650 に答える