Android - 从 startActivity 获取活动对象

Posted

技术标签:

【中文标题】Android - 从 startActivity 获取活动对象【英文标题】:Android - Getting activity object from startActivity 【发布时间】:2013-09-23 20:46:57 【问题描述】:

我需要获取在调用startActivity() 时创建的Activity 的实例。但是,startActivity() 返回一个 void 值。

我猜startActivity() 不会等到Activity 被创建。

我有没有其他方法可以获取刚刚在调用startActivity 时创建的activity?或者,也许我可以自己创建一个Activity 实例并将其注册到某个地方,以便startActivity 可以找到它。

【问题讨论】:

看看这个***.com/questions/449484/… 请注意,当您开始第二个活动时,您的第一个活动将暂停。 也许如果你解释你为什么需要这个,可能还有其他方法可以解决你的问题。另外,如上所述,您的第一个活动将处于暂停/停止状态(代码通常不应在这些状态下运行) 这听起来像是一个肮脏的hack,以规避android系统架构的正常运行。您的问题强烈暗示您的应用程序的架构从根本上被破坏了。 【参考方案1】:

您要查看的 Activity 是在您自己的应用中还是在其他应用中?

如果它们都是你的活动,那么你可以做你想做的事情,尽管活动应该保持分开。您可以考虑改用 Fragment,因为它们可以通过其父 Activity 相互“交流”。

如果它们不在您的应用程序中,则您无法获取另一个 Activity 实例,因为根据定义它位于另一个进程中。此外,Android 系统会阻止它,因为这将是一个很大的安全漏洞。

一般来说,我在尝试获取您自己的组件之外的某物的实例时会稍微眯起眼睛,除非它是系统中某物的实例。组件之间的通信应该通过 Intent、绑定的服务特性或内容 URI。传递实例会使您容易发生内存泄漏。

【讨论】:

以上是关于Android - 从 startActivity 获取活动对象的主要内容,如果未能解决你的问题,请参考以下文章

Android 小知识:startActivity 与 finish 的调用顺序

Android 小知识:startActivity 与 finish 的调用顺序

Android 系统源码初步阅读之 activity 的 startActivity(intent) 与 非 activity 的 startActivity(...) 的不同

Android 系统源码初步阅读之 activity 的 startActivity(intent) 与 非 activity 的 startActivity(...) 的不同

权限拒绝:startActivity 要求以用户 -2 的身份运行,但从用户 0 调用;这需要 android.permission.INTERACT_ACROSS_USERS_FULL

从 Activity 上下文之外调用 startActivity()