gpt4 book ai didi

android - 检测 onActivityResult 的 Activity 创建

转载 作者:行者123 更新时间:2023-11-30 03:12:11 24 4
gpt4 key购买 nike

如何检测 Activity 是为了处理 onActivityResult 而启动,还是因为方向改变或其他事件而启动以重新创建 Activity。

我启动 Activity A,如果满足条件,我启动 Activity B,并在 A 中处理结果。

在低内存情况下, Activity A 被销毁并重新创建以处理来自 B 的结果。在onInit期间,我的内部状态显示我仍然需要显示 Activity B,因此重新显示B。

我该如何正确处理这个问题?

最佳答案

经过编辑以尝试解决所提出的实际问题。

为了防止在返回 Activity 时运行设置代码,您可以利用 onSaveInstanceState方法。您可以在类 A 中覆盖此方法这样,如果您的 Activity 因任何原因被终止,您可以存储有关它的状态(例如您已经开始 Activity B 的事实)。在此方法中,您修改传入的 Bundle通过在其上设置键值对。然后这个包将被传递给类的 onCreate当 Activity 重新启动时。因此,您的 A 类的相关部分可能如下所示:

public class A extends Activity {
boolean startedB = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
startedB = savedInstanceState != null && savedInstanceState.getBoolean("started_b", false);
if (!startedB) {
Intent intent = new Intent(this, B.class);
startActivityForResult(intent, 1);
startedB = true;
}
// rest of code
// .....
}

@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("started_b", startedB);
}
}

原始答案

当您开始一个结果 Activity 时,您可以在用于开始 Activity 的 Intent 上放置一个额外的标志或值。例如,如果我想开始 Activity Foo结果,我可以使用

Intent intent = new Intent(this, Foo.class);
intent.putExtra(IS_FOR_RESULT, true);
startActivityForResult(intent, REQUEST_CODE);

哪里IS_FOR_RESULT是一个字符串,例如 "IS_FOR_RESULT"REQUEST_CODE是一个整数,例如 1 .在开始 Activity 的onCreate (在本例中为 Foo 类)您可以使用以下命令检查它是否已启动以获取结果

Intent intent = getIntent();
if (intent.hasExtra(IS_FOR_RESULT) && intent.getBooleanExtra(IS_FOR_RESULT) {
// Handle activity being started for a result
}

根据您所说的,您可能还想在开始类(class)的 onNewIntent 中进行类似的检查。如果您正在为结果启动现有 Activity 并且它不会创建它的新实例。

一般来说,intents和 Intent Extras 是在应用程序组件之间传递实例特定信息的有用工具。

关于android - 检测 onActivityResult 的 Activity 创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com