마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

어플이 죽어 버리는 현상 질문드립니다.

0 추천

어플  기능으로 정상 조건을 넣고 검색 로직 기능 수행후

일부러 비정상 조건으로 조회를 한다음, 다시 정상 검색 하면

어플이 죽어 버립니다. 단 블루투스 키보드를 이용했을 경우에만

이 현상이 발생하고, 터치로 입력하면 발생하지 않습니다.

 조언을 좀 구하고자 질문드립니다~ 아래는 에러 로그 입니다.

감사합니다.

11-12 15:21:51.293: E/AndroidRuntime(7077): FATAL EXCEPTION: main
11-12 15:21:51.293: E/AndroidRuntime(7077): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.             [in ListView(2131296292, class android.widget.ListView) with Adapter(class 클래스명)]
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.widget.ListView.layoutChildren(ListView.java:1538)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.widget.AbsListView.onTouchModeChanged(AbsListView.java:3180)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:606)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewRootImpl.ensureTouchModeLocally(ViewRootImpl.java:2921)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewRootImpl.ensureTouchMode(ViewRootImpl.java:2905)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3058)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2612)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:978)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2621)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.os.Looper.loop(Looper.java:137)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at android.app.ActivityThread.main(ActivityThread.java:4507)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at java.lang.reflect.Method.invokeNative(Native Method)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at java.lang.reflect.Method.invoke(Method.java:511)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
11-12 15:21:51.293: E/AndroidRuntime(7077):  at dalvik.system.NativeStart.main(Native Method)
 

진호지노 (120 포인트) 님이 2013년 11월 12일 질문

1개의 답변

+1 추천
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.

 

리스트의 내용이 갱신되었는데 아답터의 notifyDatasetChanged() 메소드를 다른 스레드에서 호출한것 같네요.

해당 메소드는 UI 변화를 일으키는 메소드라 UI스레드 (메인 스레드)에서 호출 되어야 합니다.
원조안드로이드 (58,190 포인트) 님이 2013년 11월 12일 답변
...