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()
类型更改为
weakReference

weakReference
,但是如果只在一个方法中使用上下文并返回,那么根本就没有必要使用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不是一个简单的论坛