为什么对服务对象有静态弱引用?

Why have a static weakreference to service object?

我在下面看到了这个 android 代码。是否有在服务中创建静态弱引用对象以获取其引用的用例?我知道静态变量不符合垃圾收集的条件。一般来说,创建任何静态变量的弱引用会改变它的 gc 属性吗?

例如:

private static WeakReference<MyService> mService;
public static MyService getInstance(){
    if(mService != null){
          return mService.get();
    } 
    return null;
}

然后在我的 onCreate

public void onCreate(){
   super.onCreate();
   mService = new WeakReference<MyService>(this);
}

WeakReference 使服务可以被垃圾回收,即使 activity 仍然有引用它的变量。静态意味着它将在 activity 结束后持续存在。因此,您获得了对在调用之间持续存在的服务的引用,但仍允许对服务进行 gced。 (WeakReference 本身不能被 GC,但不应该占用太多内存)。