您好,登錄后才能下訂單哦!
本文介紹了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。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。