adsense728x90


android bug? FragmentManager execPendingActions 에서 NullPointerException Android


같은 stacktrace


12:15:14.162: E/AndroidRuntime(25911): FATAL EXCEPTION: main02-11 12:15:14.162: E/AndroidRuntime(25911): java.lang.NullPointerException02-11 12:15:14.162: E/AndroidRuntime(25911):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1419)02-11 12:15:14.162: E/AndroidRuntime(25911):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)02-11 12:15:14.162: E/AndroidRuntime(25911):    at android.os.Handler.handleCallback(Handler.java:725)02-11 12:15:14.162: E/AndroidRuntime(25911):    at android.os.Handler.dispatchMessage(Handler.java:92)02-11 12:15:14.162: E/AndroidRuntime(25911):    at android.os.Looper.loop(Looper.java:137)02-11 12:15:14.162: E/AndroidRuntime(25911):    at android.app.ActivityThread.main(ActivityThread.java:5039)02-11 12:15:14.162: E/AndroidRuntime(25911):    at java.lang.reflect.Method.invokeNative(Native Method)02-11 12:15:14.162: E/AndroidRuntime(25911):    at java.lang.reflect.Method.invoke(Method.java:511)02-11 12:15:14.162: E/AndroidRuntime(25911):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)02-11 12:15:14.162: E/AndroidRuntime(25911):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)02-11 12:15:14.162: E/AndroidRuntime(25911):    at dalvik.system.NativeStart.main(Native Method)

아, 힘들었당. 뭐가 문제인지 debugging을 할 수가 있어야지..

v4 source code로 debugging해보기에는

execPendingActions()

 if (Looper.myLooper() != mActivity.mHandler.getLooper()) { // mActivity == null

에서 mActivity가 null이어서 죽는 것이었다.

개발자 옵션에서 activity를 보존하지 않는 설정을 했을 때, 매번 발생했다.
다른 activity로 전환하거나 home 화면으로 이동할 때,
activity를 destroy하면서, fragment도 다 destroy하고 mActivity가 null인데,

좀 이따가 깽뚱하게 
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
에서 처리할 게 남았나 보다.

힘들게 고생한 끝에 찾은 원인은,
fragment를 remove하지 않고 hide한 것과

public void onPageScrolled(int arg0, float arg1, int arg2) {

someView.setVisibility(View.INVISIBLE);


이었다.

if (someView.getVisibility() == View.VISIBLE)

를 넣어서 일단은 고쳤다.


하지만, onPageScrolled에 view 변경 logic을 넣는다고 해서 죽으면 안되지..

android support library bug인 것 같다.







덧글

댓글 입력 영역