Java 如何向其他需要的类提供对主活动/上下文的访问?

Java 如何向其他需要的类提供对主活动/上下文的访问?,java,android,Java,Android,这就是我向所有需要上下文和/或需要在我的主活动类中调用方法的类提供对我的主活动的访问的方式: public interface InterfaceMainActiv { ActMain getMainActiv(); } 我知道这是一个非常糟糕的表格,但是如果需要的话,你可以把你的主要活动的权限分发出去吗?这样做会破坏任何东西吗@我特别担心这个警告: } 然后修改清单文件 <application android:name="com.you.yourapp.Global

这就是我向所有需要上下文和/或需要在我的主活动类中调用方法的类提供对我的主活动的访问的方式:

public interface InterfaceMainActiv {
    ActMain getMainActiv();
}
我知道这是一个非常糟糕的表格,但是如果需要的话,你可以把你的主要活动的权限分发出去吗?这样做会破坏任何东西吗@我特别担心这个警告:

}

然后修改清单文件

<application
    android:name="com.you.yourapp.GlobalClass"

在应用程序周围传递上下文实例时必须非常小心,因为在Android上很容易导致内存泄漏。 对于您的问题,最好的答案是不要这样做,android特定对象的实例活动、片段、应用程序上下文的保留/引用时间不应超过其各自的生命周期

当您将任何视图声明为静态视图时,会导致内存泄漏,因为静态视图未被整理到活动/片段生命周期,但仍然保留对它的引用,而不是在驻留在中的类上,并且在相应的活动/片段完成时无法被GC-d垃圾收集

为了避免内存泄漏,请考虑:

更改代码组织 使用其中一个事件总线库 使用普通java接口在组件之间进行通信 如果您有一些需要上下文的非android方法,那么您可以始终使用它传递应用程序上下文

如果您想从片段中获取活动引用,同样适用: getActivity将返回Activity对象,您可以将其强制转换为您的Activity,然后使用它调用适当的方法

使用接口

创建一个包含要调用的方法的接口,这些方法需要上下文。假设你有一个接口演示,它有doSomethingParam a方法

在活动中实现该接口,当您调用此方法时,该活动将成为活动ATM。所以,基本上,您将让MyActivity实现演示,并且该活动具有doSomethingParam,这是一个上下文可用的方法

使要从中调用方法的类的构造函数以Demo接口作为参数。所以对于前公共MyAdapterDemo演示。然后在构造对象时,传递实现该接口的活动-new MyAdaptermyActivity

在类demo.doSomethingdata中调用接口方法,它将在活动中执行。通过接口方法的参数传递所有需要处理的数据

利润


这可以归结为OOP的基本原则。

您能否指定希望访问上下文的类的类型,它是否像RecyclerView适配器?我基本上在许多不同的类中使用上下文,以便它们可以通过findViewByIdR.id.view\u name获得布局的句柄。我还将引用传递给main活动,这样我就可以从这些其他类调用它的方法。我知道我应该在界面中详细说明这些方法,而不仅仅是分发整个主要活动,对吗?你是说不要做@OutOfBounds 94建议的事情?相反,你应该以级联的方式将你的主要活动作为一个参数传递给任何一个需要它的孩子们??视情况而定:-如果你需要android特定类之外的上下文,请使用ApplicationContext-如果你需要从片段与你的活动进行通信,请使用getActivityContext;这带来了lint警告:不要将Android上下文类放在静态字段中。这是有道理的,但在这种情况下,我为什么要这样做呢?基本上,我只想调用重用父活动的方法。扩展该活动还将上下文扩展到对象上,该对象可能比其父活动的寿命更长,这将再次导致泄漏,因为您的对象将保留对上下文的引用。在看到整个代码/用例之前,我无法真正详细说明原因。但使用接口通常更干净、更灵活,建议不要使用继承。有了一个界面,你只使用你需要的东西,有了继承,你可以拉其他你不需要的东西。太棒了,回答得很好,谢谢你的解释:
<application
    android:name="com.you.yourapp.GlobalClass"
 getActivity().getApplicationContext() // Application Context will live as long your app lives so you don't have to worry about memory leaks