你所尋找的是一個Async Task.
的AsyncTask能夠正確且容易使用的UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操作線程和/或處理程序。
AsyncTask被設計成圍繞線程和處理程序 的助手類,並不構成通用線程框架。 AsyncTasks 理想情況下應該用於短操作(大部分爲 )。如果您需要保持長時間運行線程, 強烈建議您使用java.util提供的各種API。併發包如Executor,ThreadPoolExecutor和FutureTask。
異步任務由運行在 後臺線程上的計算定義,其結果在UI線程上發佈。異步任務由3個通用類型定義,分別稱爲Params, Progress和Result,以及4個步驟,分別稱爲onPreExecute,doInBackground, onProgressUpdate和onPostExecute。
傳統上,你基本上是異步執行一個任務,以便它不會掛起UI。這是什麼導致你遇到什麼:「這是導致我的應用程序不響應和關閉。」
如從Vogella採取:
- 的AsyncTask
7.1。 AsyncTask類的用途
AsyncTask類封裝了後臺進程的創建以及與主線程的同步。它還支持正在運行的任務的報告進度。
7.2。使用AsyncTask類
要使用AsyncTask,您必須對其進行子類化。 AsyncTask使用泛型和可變參數。這些參數是以下AsyncTask。
AsyncTask通過execute()方法啓動。
execute()方法調用doInBackground()和onPostExecute()方法。
TypeOfVarArgParams作爲輸入傳遞給doInBackground()方法,ProgressValue用於進度信息,而ResultValue必須從doInBackground()方法返回並作爲參數傳遞給onPostExecute()。
doInBackground()方法包含應該在後臺線程中執行的編碼指令。此方法在單獨的線程中自動運行。
onPostExecute()方法再次與用戶界面線程同步自身,並允許更新它。一旦doInBackground()方法完成,該方法將被框架調用。
7.3。幾個異步任務的並行執行
Android在Android 1.6之前執行AsyncTask任務,並且依次默認爲在Android 1.6之前執行AsyncTask任務。
您可以告訴Android使用executeOnExecutor()方法並行運行它,並指定AsyncTask.THREAD_POOL_EXECUTOR作爲第一個參數。
以下代碼片段演示了這一點。
// ImageLoader extends AsyncTask
ImageLoader imageLoader = new ImageLoader(imageView);
// Execute in parallel
imageLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "http://url.com/image.png");
7.4。使用AsyncTasks的缺點
AsyncTask不會自動處理配置更改,即如果重新創建活動,程序員必須在其編碼中處理該配置。
一個常見的解決方案是在保留的無頭片段中聲明AsyncTask。
檢查了這一點對於如何可以實現它一個很好的概述和示例:Handlers, Async Tasks and Threads - Vogella.
的代碼可能是'的onCreate()'但由於這是一個真正的回調,需要用戶「觸摸」它直到那時它纔會執行。通常一個'AsyncTask'可以用來在後臺線程上運行代碼,但不知道你的後臺工作是什麼,我不能說這是最好的方法。 –
http://stackoverflow.com/questions/6887218/thread-while-loop-android應該幫助你 – nullpointer