我遇到了 Android 生命周期方面的问题。据我所知,文档中没有涵盖这一点。
我有 Activity A,它使用 startActivityForResult 启动 Activity B。
public class ActivityA extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.btnStart);
b.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
startActivityForResult(new Intent(ActivityA.this, ActivityB.class), 0);
}});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("ActivityA", "onResult");
}
}
Activity B 调用图库 Activity :
public class ActivityB extends Activity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("ActivityB", "onResult");
setResult(0, data);
finish();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.btnStart);
TextView v = (TextView)findViewById(R.id.helloText);
v.setText("Activity B");
b.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 0);
}});
}
}
当 Activity A 和 B 保留在内存中时,结果会按预期从 Activity 堆栈中弹出。
问题是图库 Activity 会消耗足够的资源,从而将 Activity A 和 Activity B 推出内存。 Android 杀死进程。当图库 Activity 返回结果时,将再次创建 Activity A 和 B,并调用 Activity B 的 onActivityResult。但是,这次当 ActivityB 调用 finish() 时,新创建的 ActivityA 的 onActivityResult 没有被调用。
我做错了什么吗?
这是一个错误吗?
这是预期的 Android 行为吗?
谢谢!
最佳答案
这不是错误。 Activity 2 第二次启动时,它不是由 Activity A 启动的。当 Activity B 被终止时,您需要在 onStop
、onPause
或 onDestroy
方法,然后在 Activity 重新启动时使用该状态。使用该信息,您仍然可以在 Activity B 退出时将适当的信息传回 Activity A。
关于android - Activity 被终止时与 OnActivityResult() 的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959693/