Android:传递WeakReference作为参数(Android: passing WeakReference as a parameter)
我在我的(Obj_A)中为ImageView使用WeakReference,并且将此ImageView WeakReference传递给另一个将其分配给ImageView变量(但不是WeakReference)的对象(Obj_B),因此接收方ImageView变量将具有WeakReference的性质?
我希望我能够正确地塑造我的问题,并且我希望你明白我的意思。
I'm using a WeakReference for ImageView in my (Obj_A), and I pass this ImageView WeakReference to another object (Obj_B) that assign it to an ImageView variable (But not a WeakReference as well), so will the receiver ImageView variable have the nature of the WeakReference?
I hope I managed to mold my question correctly, and I hope you understand what I mean.
原文:https://stackoverflow.com/questions/30238193
最满意答案
不,您Obj_B中的ImageView不会是WeakReference。 WeakReference允许你以一种方式存储一个对象的引用,如果这个对象在任何地方没有其他的“强”引用,它将被垃圾收集。 通过移除Obj_B中的WeakReference包装器,您现在正在接受WeakReference管理的对象并存储您自己的强引用。
No, your ImageView in Obj_B will not be a WeakReference. A WeakReference allows you to store a reference to an object in such a way that if that object has no other "strong" references anywhere, it will be garbage collected. By removing the WeakReference wrapper in Obj_B, you're now taking the object that your WeakReference was managing and storing your own strong reference to it.
相关问答
更多-
exArrayList.add(new WeakReference
("Hello")); 是一个不好的例子,因为String文字不会被GC编辑 如果它是例如exArrayList.add(new WeakReference -
这怎么解决这个情况? WeakReference允许Activity被垃圾回收,所以你没有内存泄漏。 空引用意味着AsyncTask 不能盲目尝试更新不再附加的用户界面,这将抛出异常(例如,未附加到窗口管理器的视图)。 当然,你必须检查null以避免NPE。 如果我的asynctask正在下载十个文件,并且完成5后,该活动将重新启动(因为方向更改),那么我的FileDownloadingTask是否再次被调用? 取决于您的实现,但可能是 - 如果您不刻意做某些事情来重复下载不必要的,例如将结果缓存在某处。 ...
-
强引用的一个问题是缓存,特别是非常大的结构,如图像。 假设你有一个应用程序必须使用用户提供的图像,像我工作的网站设计工具。 自然地,您想要缓存这些图像,因为从磁盘加载它们是非常昂贵的,并且您希望避免在内存中立即存在两个副本(潜在巨大的)图像的可能性。 因为图像缓存应该阻止我们在不需要的时候重新加载图像,所以您将很快意识到缓存应该总是包含对已经在内存中的任何图像的引用。 通过强大的引用,虽然引用本身会强制图像保留在内存中,这要求您以某种方式确定图像不再需要在内存中,并将其从缓存中删除,从而使其成为垃圾回收的资 ...
-
这听起来很健全吗? 我永远不会使用这种技术。 可变静态数据成员是危险的,尽管WeakReference 。 特别是,如果用户做了不可想象的事情,并且比如将手机用作手机,或者让您的应用程序流动很长一段时间,我希望这会失败。 您的活动可能会被销毁并终止您的流程以释放RAM,但活动将保留在任务中并可能会重新激活。 那时,你的状态很糟糕,因为静力学已经被破坏了。 这种技术是否存在潜在的内存泄漏问题? 你正在泄露Intent 。 有没有更好的方法来实现这一目标? 出于本答案其余部分的目的,我将把您的起点称为活动A,将 ...
-
仔细查看错误消息。 它不是在谈论课程(它发现这很好)。 它在谈论构造函数。 它找不到在WeakReference
类型上获取javax.sound.midi.Receiver参数的构造函数。 查看WeakReference 的JavaDoc,有一个构造函数接受类型为T的参数。 您正在尝试创建WeakReference 但尝试传入javax.sound.midi.Receiver类型的对象。 您需要创建一个WeakReference 或 ... -
弱参考(wr)不提供回叫。 如果你需要一个正确的回调,可以覆盖对象的finalize方法,以便在垃圾回收(gc'd)时执行某些操作。 wr提供的是一个referenceQueue(rq),它基本上是一个参考列表,其参照物没有被gc'd。 您在引用的构造函数中附加referenceQueue。 ReferenceQueue
rq = new ReferenceQueue (); WeakReference wr = new WeakRe ... -
通过查看ecallist.h,我们可以看到WeakTarget / WeakTarget
的内部方法是在WeakReferenceNative / WeakReferenceOfTNative类中实现的。 查看他们的源代码,我们可以看到SetTarget (由Target setter使用)和GetWeakReferenceTarget ,由Target getter和TryGetTarget 。 所以可能整个Target / TryGetTarget是线程安全的( 从某种意义上说它们不会破坏.NET的 ... -
不,您Obj_B中的ImageView不会是WeakReference。 WeakReference允许你以一种方式存储一个对象的引用,如果这个对象在任何地方没有其他的“强”引用,它将被垃圾收集。 通过移除Obj_B中的WeakReference包装器,您现在正在接受WeakReference管理的对象并存储您自己的强引用。 No, your ImageView in Obj_B will not be a WeakReference. A WeakReference allows you to store ...
-
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22). Type in expressions to have them evaluated. Type :help for more information. scala> class A defined class A scala> class B(var value: A) defined class B scala> ne ...
-
我不确定你的代码有多复杂,但如果每个movieclip都有MOUSE_UP事件处理程序 - 某些函数,你确实可以使用removeEventListener MOUSE_UP函数。 例如: var mc:MovieClip = new MovieClip(); mc.addEventListener( MouseEvent.MOUSE_UP, onMU ); function onMU(e:MouseEvent){ var target = MovieClip(e.currentTarget); ...