Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在活动之间来回传递消息_Android_Android Activity_Android Lifecycle - Fatal编程技术网

Android:在活动之间来回传递消息

Android:在活动之间来回传递消息,android,android-activity,android-lifecycle,Android,Android Activity,Android Lifecycle,我有4个活动A、B、C、D。A开始活动结果B、B开始活动结果C和C开始活动结果D。 我想在活动A上执行任务X(取决于活动B的结果)。目前,我使用setResult()/onActivityResult()在活动之间来回传递消息。这是脆弱的,因为活动B/C可能随时结束,在这种情况下,消息无法通过setResult()传回。我们这里有更好的沟通方式吗?不依赖于活动的生命周期。因为您传递的是简单的数据类型,并且希望将这些数据类型保留到活动的生命周期之外,所以这是一个解决方案。下面是一个关于如何使用Sh

我有4个活动A、B、C、D。A开始活动结果B、B开始活动结果C和C开始活动结果D。
我想在活动A上执行任务X(取决于活动B的结果)。目前,我使用
setResult()
/
onActivityResult()
在活动之间来回传递消息。这是脆弱的,因为活动B/C可能随时结束,在这种情况下,消息无法通过
setResult()
传回。我们这里有更好的沟通方式吗?不依赖于活动的生命周期。

因为您传递的是简单的数据类型,并且希望将这些数据类型保留到
活动的生命周期之外,所以这是一个解决方案。下面是一个关于如何使用
SharedReference

写作:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
阅读:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

活动D应发送一个
Intent
启动活动A,其中包含从B->C->D收集的所有配置参数。您可以使用类似
SINGLE_TOP
的Intent标志将活动A返回堆栈顶部<代码>共享引用将起作用,但您最终将花费与创建意图一样多的时间序列化配置并返回活动A。

我认为可以很好地满足您的需要。只需发送一个
Intent
,并使用
putExtra()
函数随
Intent
发送额外数据。然后,当收到
Intent
时,您可以检索发送的任何额外数据。

您传递的是什么类型的数据?只是一些指示结果的标志,可能是string或int。
这是脆弱的,因为活动B/C可能随时完成,在这种情况下,消息无法通过setResult()传回
我不理解这一点,这是活动生命周期的流程,这就是
setResult()
的工作原理。您可以找到其他选项,如
SharedReferences
,但我认为您必须找到正确的方法来使用
onActivityResult()
setResult()
相应的活动生命周期。因为如果活动B/C可以在任何时间完成,那么它们应该是
onStop()
onDestroy()这两个活动将调用
,您必须在此场景中调用setResult()。是的,如果B/C销毁,A将不会收到从D传递的结果。这就是为什么称其为脆弱。您的解决方案可行,但必须根据活动生命周期仔细处理所有情况。这仍然不是最好的。你也可以尝试一个单一场景。共享参考对我们来说太重了。我现在正在考虑单身,将在这里更新并欢迎任何讨论。你说“太重”是什么意思?@user2060386