我面临一个奇怪的问题我甚至不知道如何正确解释,但我希望有人面对这个伪问题,并且可以告诉我它为什么会发生。
我有一个复杂的活动,偶尔会跨越线程来加载资源。
看起来,不知何故,如果我在UI线程上的一个线程的执行上下文中分配弱引用,它将返回null。
我绝对相信我不会将该引用置空,因为我只将它分配到一个地方,就像:
function assignReference(FunqSlide slide) {
mWeakEditSlide=new WeakReference<FunqSlide>(newSlide);
if (Conf.LOG_ON) Log.d(TAG, "SetSlide_internal "+index+"="+mWeakEditSlide+"->"+mWeakEditSlide.get());
.
.
}
这会生成具有分配给有效对象的预期弱引用的跟踪
06-01 17:40:50.030: D/FunqStory[Hiphop en LA](18390): SetSlide_internal 4=java.lang.ref.WeakReference@41625d18->FunqSlide{40f60728}
.
. next is processing
但程序流程仍在继续,稍后,函数会访问先前创建的引用,但它是空的!
06-01 17:40:53.330: D/FunqStory[Hiphop en LA](18390): *** CURRENT EDIT SLIDE ID weakreference is null!!!
06-01 17:40:53.330: E/AndroidRuntime(18390): FATAL EXCEPTION: main
06-01 17:40:53.330: E/AndroidRuntime(18390): java.lang.NullPointerException
06-01 17:40:53.330: E/AndroidRuntime(18390): at com.regaliz.funq.gui.Props_LayerList.loadSlide(Props_LayerList.java:77)
06-01 17:40:53.330: E/AndroidRuntime(18390): at com.regaliz.gui.fragments.FunqHelperSupport$Frag.setup_native_pane(FunqHelperSupport.java:1028)
06-01 17:40:53.330: E/AndroidRuntime(18390): at com.regaliz.libneo.NativeStory$ActionBarHandler.handleItemSelected(NativeStory.java:1612)
并且,如果已经取消它,那么在nullpointerexception之前应该有一个函数assignRefennce的调试跟踪,但是没有,这表明我的代码之外的东西是为我取消引用。
当然我已经解决了它只是在同一个线程中做的事情,但我真的想知道发生了什么!
任何指针?还是WeakReferences?的xD
提前致谢!
答案 0 :(得分:0)
您是否尝试从与创建它的线程不同的线程中读取WeakReference
?如果您那时需要使用正确的同步,以便可以看到更改。