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 设备(硬件)上的 Home 按钮
  5. 调用 Child 的 onPause、onStop 和 onDestroy。

但是当应用程序被带到后台时,我没有看到程序控件进入 Parent 的 onActivityResult。

当应用程序处于后台状态时,此特定程序的程序控制在哪里?

在将应用程序带回前台时,在活动生命周期方面的预期行为是什么?

提前致谢

任何人都可以解释一下吗?

4

1 回答 1

1

如果您在 onPause 中删除了对 finish() 的调用,那么点击 home 键只会调用子活动的 onPause 方法。当您重新启动应用程序时,仅调用子活动 onResume 方法。似乎没有调用任何父方法。在用户更改手机方向后,在活动中调用 setResult 然后在 onPause FAILS 中结束的模式。因此,如果用户输入数据,保存数据(在 onSaveButtonClicked 中调用 setResult),更改手机方向,然后退出调用完成,并且不会保存更改。

考虑在 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 回答