请帮助理解一个奇怪的空指针异常,它似乎只发生在特定设备上(目前仅从不同的平板电脑报告,例如:Nexus-7、华硕......)。
从其他成员函数调用当前活动的成员函数时发生空指针异常:
10-22 13:50:09.190 E/AndroidRuntime(4445): FATAL EXCEPTION: main
10-22 13:50:09.190 E/AndroidRuntime(4445): java.lang.NullPointerException
10-22 13:50:09.190 E/AndroidRuntime(4445): at com.plasmobit.CosmicPatrol.ActLogBook.onWindowFocusChanged(SourceFile:194)
10-22 13:50:09.190 E/AndroidRuntime(4445): at com.android.internal.policy.impl.PhoneWindow$DecorView.onWindowFocusChanged(PhoneWindow.java:2366)
10-22 13:50:09.190 E/AndroidRuntime(4445): at android.view.View.dispatchWindowFocusChanged(View.java:5740)
10-22 13:50:09.190 E/AndroidRuntime(4445): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:851)
10-22 13:50:09.190 E/AndroidRuntime(4445): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2557)
10-22 13:50:09.190 E/AndroidRuntime(4445): at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 13:50:09.190 E/AndroidRuntime(4445): at android.os.Looper.loop(Looper.java:137)
10-22 13:50:09.190 E/AndroidRuntime(4445): at android.app.ActivityThread.main(ActivityThread.java:4424)
10-22 13:50:09.190 E/AndroidRuntime(4445): at java.lang.reflect.Method.invokeNative(Native Method)
10-22 13:50:09.190 E/AndroidRuntime(4445): at java.lang.reflect.Method.invoke(Method.java:511)
10-22 13:50:09.190 E/AndroidRuntime(4445): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-22 13:50:09.190 E/AndroidRuntime(4445): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-22 13:50:09.190 E/AndroidRuntime(4445): at dalvik.system.NativeStart.main(Native Method)
第 194 行的代码是被覆盖的 onWindowFocusChange 活动接口的一部分。它只是一个无参数成员函数的调用:
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
...
doSomeStuff(); // Line: 194
...
}
private void doSomeStuff()
{
....
}
因为我们在 onWindowFocusChange 函数内部,所以 ActLogBook 活动实例的 this 指针应该是有效的,那么这里的空指针异常怎么可能呢?