Java 如何将活动的弱接口类型传递给singleton类
我有一个单例类,我想将活动的Java 如何将活动的弱接口类型传递给singleton类,java,android,performance,android-service,Java,Android,Performance,Android Service,我有一个单例类,我想将活动的弱引用传递给它 活动正在实现一个接口,所有的活动都将实现这个接口,所以我想把接口类型传递给singleton类 这就是我正在做的 接口 public interface IAnalytics { String getAnalyticViewName(); } 单身班 public static AnalyticsWrapper getInstance(WeakReference<IAnalytics> iAnalytics) {
弱引用传递给它
活动正在实现一个接口,所有的活动都将实现这个接口,所以我想把接口类型
传递给singleton类
这就是我正在做的
接口
public interface IAnalytics {
String getAnalyticViewName();
}
单身班
public static AnalyticsWrapper getInstance(WeakReference<IAnalytics> iAnalytics) {
IAnalytics activityObject = iAnalytics.get();
activityName = activityObject.getAnalyticViewName();
}
公共静态分析rapper getInstance(WeakReference iAnalytics){
IAnalytics activityObject=IAnalytics.get();
activityName=activityObject.getAnalyticViewName();
}
main活动
public class MainActivity extends AppCompatActivity implements IAnalytics{
private WeakReference<MainActivity> weakReference;
protected void onCreate(Bundle savedInstanceState) {
AnalyticsWrapper analyticsWrapper= AnalyticsWrapper.getInstance(weakReference);
}
}
public类MainActivity扩展AppCompatActivity实现IAnalytics{
私人WeakReference WeakReference;
创建时受保护的void(Bundle savedInstanceState){
AnalyticsWrapper AnalyticsWrapper=AnalyticsWrapper.getInstance(weakReference);
}
}
这个问题是,当我将This
传递给AnalyticsWrapper
时,它说当需要像活动一样保留对上下文的引用时,需要将getInstance()
类型更改为weakReferenceweakReference
,但是如果只在一个方法中使用上下文并返回,那么根本就没有必要使用WeakReference。只需使用:
public static AnalyticsWrapper getInstance(IAnalytics iAnalytics) {
activityName = iAnalytics.getAnalyticViewName();
}
当您需要像活动一样保留对上下文的引用时,需要使用WeakReference
,但如果您仅在一个方法中使用上下文并返回,则根本不需要使用WeakReference。只需使用:
public static AnalyticsWrapper getInstance(IAnalytics iAnalytics) {
activityName = iAnalytics.getAnalyticViewName();
}
只需将WeakReference
更改为WeakReferenceThanks@Lino,错误消失了,您能告诉我两种方法之间的区别吗?将WeakReference
更改为WeakReferenceThanks@Lino,错误消失了,你能告诉我@greywold82的2个可能的副本之间有什么区别吗?谢谢,这就是我的理解,我将活动引用传递给singleton类,并从那里调用活动方法。因此,singleton类将始终具有该活动的引用,即使在活动被销毁之后,GC也无法清除它。您所期望的与WeakReference
does@Kirmani88不,根据你的代码,signleton类不会有任何对活动的引用,它只调用获取activityName的方法,然后返回,没有泄漏。不同的是,如果在类型的singleton类中使用一个属性保留对activty的引用IAnalytics@Kirmani88记住接受答案,stackoverflo不是一个简单的问题forum@greywold82,谢谢,这就是我的理解,我正在将活动参考传递给singleton班级,并从那里调用活动方法。因此,singleton类将始终具有该活动的引用,即使在活动被销毁之后,GC也无法清除它。您所期望的与WeakReference
does@Kirmani88不,根据你的代码,signleton类不会有任何对活动的引用,它只调用获取activityName的方法,然后返回,没有泄漏。不同的是,如果在类型的singleton类中使用一个属性保留对activty的引用IAnalytics@Kirmani88记住要接受答案,StackOverfo不是一个简单的论坛