【问题标题】:Android: Access method in an activity from another activityAndroid:从另一个活动中访问活动中的方法
【发布时间】:2011-10-19 08:36:05
【问题描述】:

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

当使用startActivity 启动活动时,是否可以访问底层类实例本身并简单地调用方法?

【问题讨论】:

    标签: android methods scope


    【解决方案1】:

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

    【讨论】:

    • 我可能是错的,但您这样做似乎会导致上下文泄漏。
    【解决方案2】:

    这不是一个好主意。 据我所知,第二个活动的方法实际上并没有连接到特定的活动,而你想从另一个活动中调用它。因此,将该方法带到其他(非活动)类(可能是静态方法)并从两个活动中使用它。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          • 1970-01-01
          • 2013-07-05
          • 1970-01-01
          • 2013-03-02
          相关资源
          最近更新 更多