第二部分 补充分析一下AdapterDataSetObserver.onChanged()以及Adapter.notifyDataSetChanged()
前面的分析遗留了一个问题——AdapterDataSetObserver.onChanged()的分析。在这从Adapter.notifyDataSetChanged()入手分析。
Adapter提供了方法notifyDataSetChanged()来告知UI数据发生变化,但这个方法不能够在非UI线程中调用。否则会crash:
--------- beginning of crash
04-19 15:30:30.349 19428 19459 E AndroidRuntime: FATAL EXCEPTION: Thread-1191
04-19 15:30:30.349 19428 19459 E AndroidRuntime: Process: com.example.android.testlistview, PID: 19428
04-19 15:30:30.349 19428 19459 E AndroidRuntime: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6581)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:924)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:361)
04-19 15:30:30.349 19428 19459 E AndroidRuntime: at android.view.View.requestLayout(View.java:18745)
04-19 15:30:30.349