android-关于弱引用的问题

android-关于弱引用的问题,第1张

概述我的程序中有一个或两个弱引用.例如:ClassXmyClassX=newClassX();//Line1WeakReference<ClassX>myWeakClassX=newWeakReference<ClassX>(myClassX);//Line2if(myWeakClassX.get()!=null)//Line3{//dosomethingwithreference//Line4}我的问题:如

我的程序中有一个或两个弱引用.

例如:

ClassX myClassX= new ClassX(); //line 1WeakReference<ClassX> myWeakClassX = new WeakReference<ClassX>(myClassX); //line 2if(myWeakClassX.get() != null) // line 3{    //do something with reference //line 4}

我的问题:

如何确保在第3行的myWeakClassX.get()具有对对象的有效引用,而在第4行也有效?我可以想象,如果您真的很不幸,GC会在“第3行和第4行之间”准确地完成其工作.

感谢您的解释.

解决方法:

在Java中,首先要了解的是Garbage Collector从符合垃圾收集条件的对象中回收内存

问题是如何定义资格?

资格的确定是基于指向该对象的引用类型.

为什么我们需要弱引用?

如果创建对对象的强引用,则无法对对象进行垃圾回收.简而言之,弱引用是强度不足以迫使对象保留在内存中的引用.弱引用使您可以利用垃圾收集器的能力来确定您的可达性,因此您不必自己做.

在这里发行

弱引用不足以阻止垃圾回收,因此您可能会发现(如果没有对该类的强引用)myWeakClassX.get()突然开始返回null.

还有什么选择?

软参考

当您希望引用的对象保持活动状态,直到主机进程的内存不足时,可以使用SoftReference.在收集器需要释放内存之前,该对象将无法进行收集.松散地说,绑定一个SoftReference意味着“将对象固定,直到不能再固定.”

这样,myWeakClassX.get()不会为null.

我们可以在哪里使用的示例?

>在您创建对活动的引用的任何辅助线程中.

WeakReferenceweakActivity;

//在AsyncTask中的onPostExecute方法中
活动活动= weakActivity.get();
if(activity!= null){
   //在这里进行活动
}
>如果您可以在其他地方引用活动上下文,则可以使用弱引用.
>在另一个线程中处理imagevIEw中的位图资源时
http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
>如果要创建任何哈希图或任何小部件来保存任何数据,则可以使用弱引用. http://developer.android.com/reference/java/util/WeakHashMap.html
>使用不受限制.开发人员应在适当的地方使用它.

总结

以上是内存溢出为你收集整理的android-关于弱引用的问题全部内容,希望文章能够帮你解决android-关于弱引用的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1089148.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存