我面临一个奇怪的问题,我什至不知道如何正确解释,但我希望有人遇到过这个伪问题,并且可以或多或少地告诉我为什么会发生。
我有一个复杂的活动,偶尔会跨越线程来加载资源。
看起来,不知何故,如果我在一个线程的执行上下文中分配一个弱引用,稍后,在 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 的调试跟踪,但没有,这表明我的代码之外的某些东西正在为我清空引用。
当然我已经解决了它只是在同一个线程中做这些事情,但我真的很想知道发生了什么!
任何指针?还是弱引用?xD
提前致谢 !