我正在寫一個可以啓用網絡的應用程序和改進的用戶體驗我正在使用各種併發結構。來自網絡的信息包含圖像的文本項目和URL。我目前以阻塞的方式獲取圖像,而不會產生新的線索來獲取圖像。這工作正常,但我意識到,我可以通過產生另一個線程來獲取圖像,使事情變得更快捷。我解決了一個線程池與2個工作線程處理這個任務,但現在我有應用程序崩潰間歇性問題。這似乎是隨機發生的,我不知道到底發生了什麼問題。所以這裏是我目前如何做的事情:安卓隨機崩潰併發問題
用戶點擊搜索,併產生一個新的AsyncTask獲取所需的信息。
在新的AsyncTask信息開始流入。只要有足夠的信息可用於單個項目,我們將該項目添加到列表適配器,跳轉到主線程並調用
notifyDataSetChanged()
來更新列表。我們還會向線索池提交任務以獲取圖像,並在圖像準備就緒後立即致電notifyDataSetChanged()
。繼續更新列表,直到沒有更多項目要處理。
我覺得我的設置是相當不錯的,但我想對於提高我該怎麼做的事情,也許一些指針追查是什麼導致了崩潰的一些建議。
這裏的一個logcat的輸出:
02-23 21:30:20.303:DEBUG/AndroidRuntime(1209):關閉VM 02-23 21:30:20.313:WARN/dalvikvm(1209) :線程ID = 1:未捕獲的異常線程退出(組= 0x4001d800) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):致命異常:主 02-23 21:30:20.342:ERROR/AndroidRuntime( 1209):java.lang.IllegalStateException:適配器的內容已更改,但ListView未收到通知。確保適配器的內容不會從後臺線程修改,而只能從UI線程修改。 [在ListView(16908298,類android.widget.ListView)與適配器(類android.widget.HeaderViewListAdapter)] 02-23 21:30:20.342:錯誤/ AndroidRuntime(1209):在android.widget.ListView.layoutChildren ListView.java:1492) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):在android.widget.AbsListView.onLayout(AbsListView.java:1147) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at android.view.View.layout(View.java:7035) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at android.widget.LinearLayout.setChildFrame(LinearLayout.java: 1249) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209) :在android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 02-23 21:30:20.342:錯誤/ AndroidRuntime(1209):at android.view.View.layout(View.java:7035) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at android .widget.FrameLayout.onLayout(FrameLayout.java:333) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):在android.view.View.layout(View.java:7035) 02-23 21 :30:20.342:ERROR/AndroidRuntime(1209):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):在android.widget.LinearLayout .layoutVertical(LinearLayout.java:1125) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):在android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 02-23二十一點30分二十零秒。342:錯誤/ AndroidRuntime(1209):在android.view.View.layout(View.java:7035) 02-23 21:30:20.342:錯誤/ AndroidRuntime(1209):在android.widget.FrameLayout.onLayout FrameLayout.java:333) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at android.view.View.layout(View.java:7035) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at android.view.ViewRoot.performTraversals(ViewRoot.java:1045) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at android.view.ViewRoot.handleMessage(ViewRoot.java: 1727) 02:21:30:20.342:ERROR/AndroidRuntime(1209):at android.os.Handler.dispatchMessage(Handler.java:99) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209) :在android.os.Looper.loop(Looper.java:123) 02-23 21:30:20.342:錯誤/ AndroidRuntime(1209):在android.app.ActivityThread。 main(ActivityThread.java:4627) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at java.lang.reflect.Method.invokeNative(Native Method) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at java.lang.reflect.Method.invoke(Method.java:521) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 02-23 21:30:20.342:ERROR/AndroidRuntime(1209):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 02- 23 21:30:20.342:ERROR/AndroidRuntime(1209):at dalvik.system.NativeStart.main(Native Method) 02-23 21:30:20.402:WARN/ActivityManager(72):強制整理活動com.daveco。 pricewatcher/.SearchActivity
你能爲你提供logcat輸出嗎? – ingsaurabh 2011-02-24 05:19:57