我有一個趕上22日在這裏。如果我使用AsyncTask來運行我的網絡活動,我無法從該線程更新我的用戶界面。安卓網線和視圖/ GUI更新
MainActivity.onCreate(...){
myAsyncTask.execute();
//E/AndroidRuntime(1177): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
}
網絡活動將持續,需要在不同的線程上發生。所以,我轉過身來,super.runOnUiThread
解決上述錯誤,因爲它接受Runnable
作爲參數。不幸的是,的Javadoc不是清楚了,我不知道是否super.runOnUiThread
打算讓一個線程或只是直接調用run
。顯然,它不會讓一個線程,因爲我得到這個異常:android.os.NetworkOnMainThreadException
既然我有需要的連接的一個屏應用。做這項工作最簡單的方法是什麼?
謝謝你,但我的網絡Runnable對象(裏面的AsyncTask的)發送狀態通過調用接口隨時有重新連接或連接回。我不明白它是如何做到這一點的,它甚至沒有對AsyncTask的引用。你是說我必須破解它才能通過Progress對象以某種方式獲得這些消息? – jcalfee314
@ jcalfee314:'AsyncTask'用於事務性工作。如果您嘗試擁有長時間運行的線程,請分配您自己的「線程」。然後,您可以使用任意數量的手段,有後臺線程安排做主應用程序線程,工作如'runOnUiThread()'你在你的問題中引用。關鍵是你不能在主應用程序線程上執行網絡I/O。與runOnUiThread()一起使用的'Runnable'只能*安排更新UI *並不做其他事情*。你已經有一個後臺線程/線程池/無論爲後臺工作。 – CommonsWare