Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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 Library - Fatal编程技术网

Android 将结果从链接库活动集传播回原始活动

Android 将结果从链接库活动集传播回原始活动,android,android-library,Android,Android Library,有一点背景知识,我目前正在开发一个库,其中包含一些活动组件和入口点。在最简单的描述中,目标是让库控制UI,基于一系列UI交互执行一些工作,并最终将结果传播回原始的非库活动。我试图在下图中总结流程: 如您所见,您可以通过启动活动B1或B2进入库,最终到达活动D 问:从设计的角度来看,将结果传播回客户的最佳或首选方式是什么 我曾经尝试过用FLAG_ACTIVITY_NEW_任务启动B1/B2,并使用FLAG_ACTIVITY_FORWARD_结果启动库内活动,直到最后D用FLAG_ACTIVITY_

有一点背景知识,我目前正在开发一个库,其中包含一些活动组件和入口点。在最简单的描述中,目标是让库控制UI,基于一系列UI交互执行一些工作,并最终将结果传播回原始的非库活动。我试图在下图中总结流程:

如您所见,您可以通过启动活动B1或B2进入库,最终到达活动D

问:从设计的角度来看,将结果传播回客户的最佳或首选方式是什么

我曾经尝试过用FLAG_ACTIVITY_NEW_任务启动B1/B2,并使用FLAG_ACTIVITY_FORWARD_结果启动库内活动,直到最后D用FLAG_ACTIVITY_CLEAR_任务启动,所以它成为任务中的顶部和唯一活动。然而,这似乎不能正常工作,我还需要它与API级别10兼容

另一个问题是,活动A可能是任何东西,而且事先不知道,通过A.about课程感觉非常难看

似乎这可能是一个问题,最好通过使用服务来解决

编辑: 为了进一步简化问题的概念,这里处理的主要问题非常类似于回调机制,回调被传递到原始活动。当然,具有类似侦听器接口的回调将无法工作,因为原始活动已挂起,如果当前未运行,广播也不会被传递


此外,要澄清的是,只需要库来解决这个问题,因为活动A可能来自任何使用这个库的第三方项目。

< P>而不是使用服务,考虑使用类。它允许您存储可从多个活动访问的全局变量。

从库类调用应用程序的新活动B。 使用重定向url

String redirecturl = "com.example.ThankYouScreen";
    Intent returnIntent = new Intent();
    returnIntent.putExtra("data", "DONE");
    returnIntent.setClassName(getApplicationContext().getPackageName(), redirecturl);
    startActivity(returnIntent);

我通常会尽量避免这些复杂情况,只需将所需数据写入SharedReferences或您喜欢的任何格式,以便任何需要数据的活动都可以从中获取它们的份额。SharedReferences的问题是,状态/结果不应在库调用之间保持。并且不能保证活动A或结果应该传播到的任何其他活动将清除存储的首选项值。应用程序类在库项目中没有任何意义,因为清单中的任何此类定义都会被有效忽略。而且它还造成了不必要的限制,迫使使用库的第三方使用提供的应用程序子类。