【发布时间】:2011-10-19 08:36:05
【问题描述】:
我的启动活动启动了另一个启动设置为单实例的活动。在第二个活动中,我有一个公共方法。然后我启动了第三个活动,该活动需要访问第二个活动中的公共方法。我不想使用 startActivity 并传递它的附加值,因为我认为 onCreate 会被调用(或者我错了吗?)并且我需要避免第二个活动重新初始化自身。
当使用startActivity 启动活动时,是否可以访问底层类实例本身并简单地调用方法?
【问题讨论】:
我的启动活动启动了另一个启动设置为单实例的活动。在第二个活动中,我有一个公共方法。然后我启动了第三个活动,该活动需要访问第二个活动中的公共方法。我不想使用 startActivity 并传递它的附加值,因为我认为 onCreate 会被调用(或者我错了吗?)并且我需要避免第二个活动重新初始化自身。
当使用startActivity 启动活动时,是否可以访问底层类实例本身并简单地调用方法?
【问题讨论】:
我实际上想出了一个简单的解决方案。事实上,您可以访问活动的底层类。首先,您创建一个用于保存对活动 2 的公共静态引用的类。创建活动 2 时,在其 onCreate 方法中,您将“this”存储在静态引用中。活动 2 实现了一个接口,其中包含您希望任何其他活动或对象可用的方法。您持有的静态引用将属于此接口的数据类型。当另一个活动想要调用该活动中的方法时,它只需访问公共静态引用并调用该方法。这不是 hack,而是 Java 运行方式所固有的,并且是完全合法的。
【讨论】:
这不是一个好主意。 据我所知,第二个活动的方法实际上并没有连接到特定的活动,而你想从另一个活动中调用它。因此,将该方法带到其他(非活动)类(可能是静态方法)并从两个活动中使用它。
【讨论】:
无法直接访问使用startActivity 启动的活动对象(不使用一些技巧)。坦率地说,你甚至不应该试图做到这一点。
一个 Activity 组件可以在其活动时循环多个 Activity java 对象。例如,当用户旋转屏幕时,旧的对象被丢弃,新的活动对象被创建。但这仍然是一个 Activity 组件。
根据我的经验,当您需要做您描述的事情时,您的架构会出现问题。您要么应该将活动的部分职责移至 Service 或 ContentProvider,要么使用 Intents 等。如果不了解更多细节,很难推荐任何更具体的内容。
【讨论】:
没有办法通过 startActivity() 传递引用,但是您可以使用某种共享内存来保持对 Activity 的引用。这可能是一个糟糕的设计。但是,通过 Intent 传递额外内容不会导致 onCreate,这与生命周期完全相关。
【讨论】: