考虑这种情况:
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();
}
....
}
}
}
步骤:
但是当app被带到backgrnd时,我没有看到程序控件进入Parent的onActivityResult。
当app处于后台状态时,此特定程序控件在哪里?
将app带回foregrnd活动生命周期的预期行为是什么?
提前致谢
任何人都可以解释一下。
答案 0 :(得分: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;
}...
});