本文介紹了Android 在子線程中更新UI的幾種方法示例,分享給大家,具體如下:
方式一:Handler和Message
① 實例化一個Handler并重寫handlerMessage()方法
private Handler handler = newHandler() { public void handleMessage(Message msg) { // 處理消息 super.handleMessage(msg); switch (msg.what) { case 1: button1.setText("點擊安裝"); break; case 2: button1.setText("打開"); break; } }; }; ② 在子線程中獲取或創建消息,并使用handler對象發送。
Message msg = handler.obtainMessage();msg.what = 1;handler.sendMessage(msg);
方式二:在子線程中直接調用Activity.runOnUiThread(Runnable action)方法
runOnUiThread(new Runnable() { @Override public void run() { // 更新UI的操作 }});方式三:在子線程中調用View的post()方法
myView.post(new Runnable() { @Override public void run() { // 更新UI myView.setText(“更新UI”); }});方式四:在子線程中調用View.PostDelayed(Runnabe,long)
對方式三對補充,long參數用于制定多少時間后運行后臺進程
方式五:Handler的post()方法
① 創建一個Handler成員變量
private Handler handler = new Handler();
② 在子線程中調動post()方法
handler.post(new Runnable() { @Override public void run() { // 更新UI myView.setText(“更新UI”); }});方式六:AsyncTask
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> //在這里聲明了Params、Progress、Result參數的類型 { //因為這里不需要使用onPreExecute回調方法,所以就沒有加入該方法 //后臺線程的目的是更具URL下載數據 protected Long doInBackground(URL... urls) { int count = urls.length;//urls是數組,不止一個下載鏈接 long totalSize = 0;//下載的數據 for (int i = 0; i < count; i++) { //Download是用于下載的一個類,和AsyncTask無關,大家可以忽略他的實現 totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * ));//更新下載的進度 // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } //更新下載進度 protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } //將下載的數據更新到UI線程 protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }對于一般的只是簡單更新ui,情形不復雜的,使用方式二三就可以了,但是當情形比較復雜,還是推薦使用handler。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答