2012-02-26 115 views
0

我在線程中的onPreExecute中發生崩潰「無法在未調用Looper.prepare()的線程內創建處理程序」。我的理解是onPreExecute在UI線程上運行,那麼它怎麼會崩潰?ProgressDialog在onPreExecute中崩潰

public void onPreExecute() { 
     if (loading == null || !loading.isShowing()) 
      loading = ProgressDialog.show(co, "", 
        "Retrieving Geolocation...", true); 
    } 

很奇怪的是,它的工作原理有時,有時不

回答

0

AsyncTask Threading rules(幾段下來)狀態:

  • 必須在UI線程上創建任務實例。
  • execute(Params ...)必須在UI線程上調用。
  • 不要手動調用onExExecute(),onPostExecute(Result),doInBackground(Params ...),onProgressUpdate(Progress ...)。
  • 任務只能執行一次(如果第二試圖執行一個異常將被拋出。)

我的猜測是,你在後臺線程調用​​。

+0

我可以執行兩次。將檢查。 – michaelsmith 2012-02-26 10:43:33

0

從你的問題看起來你是在一個線程使用onPreExecute()

onPreExecute()是由android提供的AsyncTask類中的一種方法。如果你重寫它,那麼它將確保該代碼在UI線程上運行,而不僅僅是代碼中的任何地方的onPreExecute()! 一個好主意是始終使用@Override符號時要覆蓋的方法,方式IDE會通知您是否與給定簽名重寫任何方法都存在或不...

+0

我沒有從我的代碼啓動預執行。當我執行線程時Android正確啓動它 – michaelsmith 2012-02-26 08:56:59