Android:来自其他活动的活动中的访问方法

时间:2011-08-03 18:13:32

标签: android methods scope

我的启动活动启动另一个活动,其启动设置为单个实例。在第二个活动中,我有一个公共方法。然后我启动第3个活动,该活动需要访问第2个活动中的公共方法。我不想使用startActivity并传递额外内容,因为我认为onCreate会被调用(或者我错了吗?)并且我需要避免第二个活动重新初始化。

使用startActivit y启动活动时,是否可以访问基础类实例本身并简单地调用该方法?

4 个答案:

答案 0 :(得分:3)

我实际上提出了一个简单的解决方案。事实上,您可以访问活动的基础类。首先,创建一个用于保存对活动2的公共静态引用的类。创建活动2时,在其onCreate方法中将“this”存储在静态引用中。活动2实现了一个接口,其中包含您希望任何其他活动或对象可用的方法。您持有的静态引用将是此接口的数据类型。当另一个活动想要在此活动中调用方法时,它只是访问公共静态引用并调用该方法。这不是黑客行为,而是Java运作的内在因素,也是完全合法的。

答案 1 :(得分:1)

这不是一个好主意。 我可以理解,当您想要从另一个活动中调用它时,第二个活动的方法实际上与特定活动无关。因此,将方法带到其他(非活动)类(可能是静态方法)并从两个活动中使用它。

答案 2 :(得分:0)

无法直接访问使用startActivity启动的活动对象(不使用某些黑客攻击)。坦率地说,你甚至不应该试图做到这一点。

一个Activity组件可以循环访问多个Activity java对象。例如,当用户旋转屏幕时,旧对象将被丢弃并创建新的活动对象。但这仍然是一个活动组件。

根据我的经验,当您需要执行您描述的操作时,您的架构会出现问题。您应该将活动的部分职责移至Service或ContentProvider,或使用Intents等。如果不了解更多详细信息,很难推荐更具体的内容。

答案 3 :(得分:0)

没有办法通过startActivity()传递引用,但是您可以使用某种共享内存来保持对Activity的引用。这可能是一个糟糕的设计。但是,使用Intent传递额外内容不会导致onCreate,这与生命周期完全相关。