我遇到了Android生命周期的问题。据我所知,文档中没有介绍。
我有活动A,它使用startActivityForResult启动活动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");
}
}
活动B调用图库活动:
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);
}});
}
}
当活动A和B保留在内存中时,结果将按预期方式向下移回活动堆栈。
问题是图库活动可能会消耗足够的资源来推动活动A和活动B的内存不足。 Android杀死了这个过程。当gallery活动返回结果时,将再次创建活动A和B,并调用activityB的onActivityResult。但是,这次当ActivityB调用finish()时,新创建的ActivityA的onActivityResult被而不是调用。
我做错了吗? 这是一个错误吗? 这是预期的Android行为吗?
谢谢!
答案 0 :(得分:1)
这不是错误。活动2第二次启动它不是由活动A启动的。当活动B被杀死时,您需要在onStop
,onPause
或onDestroy
方法中保存适当的状态,然后在活动重新启动时使用该状态。使用该信息,您可以在活动B退出时将相应的信息传递回活动A.
答案 1 :(得分:0)
所以这似乎是cyanogenmod的一个bug。我可以轻松地在我的Droid上使用CyanogenMod-7.0.3-Droid重现这个问题,但是在运行了一些带有库存操作系统和模拟器的设备后,似乎这只是在我的Cyanogen Droid上。非常令人沮丧的实现。