android - Activity 被终止时与 OnActivityResult() 的行为不一致

标签 android

我遇到了 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 被终止时,您需要在 onStoponPauseonDestroy 方法,然后在 Activity 重新启动时使用该状态。使用该信息,您仍然可以在 Activity B 退出时将适当的信息传回 Activity A。

关于android - Activity 被终止时与 OnActivityResult() 的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959693/

相关文章:

Android Kotlin - 如何检测和读取收到的短信

android - 是否可以仅更新移动平台上应用程序的某些部分?

Android v21 Theme.Appcompat 颜色重音被忽略,对话框上没有填充

java - Android KeyStore问题,另一个设备相同的应用程序

java - 为什么我的代码使用监听器将值设置为错误的 View

c# - 当应用程序要关闭时,如何在 SharedPreferences c# 中保存 int?

java - 加密和解密应用程序 key

android选择文本上的javascript触发事件

android - 单击项目时无法从 ListView 进入 webview

android - 升级我的 SQLite 数据库