Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么对服务对象有静态weakreference?_Java_Android_Service_Garbage Collection_Finalize - Fatal编程技术网

Java 为什么对服务对象有静态weakreference?

Java 为什么对服务对象有静态weakreference?,java,android,service,garbage-collection,finalize,Java,Android,Service,Garbage Collection,Finalize,我在下面遇到了这个android代码。是否存在在服务中创建静态weakreference对象以获取其引用的用例?我知道静态变量不适合垃圾收集。一般来说,创建任何静态变量的弱引用是否会改变其gc属性 例如: private static WeakReference<MyService> mService; public static MyService getInstance(){ if(mService != null){ return mService.

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

例如:

private static WeakReference<MyService> mService;
public static MyService getInstance(){
    if(mService != null){
          return mService.get();
    } 
    return null;
}
私有静态WeakReference mService;
公共静态MyService getInstance(){
if(mService!=null){
返回mService.get();
} 
返回null;
}
在我的onCreate中

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

WeakReference是这样的,即使活动仍然有一个引用它的变量,也可以对服务进行垃圾收集。静态意味着它将在活动结束后保持。因此,您可以获得一个对服务的引用,该服务在两次调用之间保持,但仍然允许对该服务进行gced。(WeakReference本身不能被GCed,但不应该占用太多内存)。

但是如果变量是静态的,它就不符合gc的条件,对吗?那么静态WeakReference不是一个矛盾修饰法吗?不,WeakReference本身是不可能的。它所持有的参考文献是