Android 在子線程中更新UI的幾種方法示例
本文介紹了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; } }; };
② 在子線程中獲取或創(chuàng)建消息,并使用handler對象發(fā)送。
Message msg = handler.obtainMessage(); msg.what = 1; handler.sendMessage(msg);
方式二:在子線程中直接調(diào)用Activity.runOnUiThread(Runnable action)方法
runOnUiThread(new Runnable() { @Override public void run() { // 更新UI的操作 } });
方式三:在子線程中調(diào)用View的post()方法
myView.post(new Runnable() { @Override public void run() { // 更新UI myView.setText(“更新UI”); }});
方式四:在子線程中調(diào)用View.PostDelayed(Runnabe,long)
對方式三對補(bǔ)充,long參數(shù)用于制定多少時間后運行后臺進(jìn)程
方式五:Handler的post()方法
① 創(chuàng)建一個Handler成員變量
private Handler handler = new Handler();
② 在子線程中調(diào)動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參數(shù)的類型 { //因為這里不需要使用onPreExecute回調(diào)方法,所以就沒有加入該方法 //后臺線程的目的是更具URL下載數(shù)據(jù) protected Long doInBackground(URL... urls) { int count = urls.length;//urls是數(shù)組,不止一個下載鏈接 long totalSize = 0;//下載的數(shù)據(jù) for (int i = 0; i < count; i++) { //Download是用于下載的一個類,和AsyncTask無關(guān),大家可以忽略他的實現(xiàn) totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * ));//更新下載的進(jìn)度 // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } //更新下載進(jìn)度 protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } //將下載的數(shù)據(jù)更新到UI線程 protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }
對于一般的只是簡單更新ui,情形不復(fù)雜的,使用方式二三就可以了,但是當(dāng)情形比較復(fù)雜,還是推薦使用handler。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實現(xiàn)透明度可變的標(biāo)題欄效果
這篇文章主要介紹了Android實現(xiàn)透明度可變的標(biāo)題欄效果的相關(guān)資料,具有一定的參考價值,需要的朋友可以參考下2016-02-02Android 登錄頁面的實現(xiàn)代碼(密碼顯示隱藏、EditText 圖標(biāo)切換、限制輸入長度)
這篇文章主要介紹了Android 登錄頁面的實現(xiàn)代碼(密碼顯示隱藏、EditText 圖標(biāo)切換、限制輸入長度),本文通過兩種方法給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Android解決dialog彈出時無法捕捉Activity的back事件的方法
這篇文章主要介紹了Android解決dialog彈出時無法捕捉Activity的back事件的方法,涉及Android操作Activity事件的相關(guān)技巧,需要的朋友可以參考下2015-05-05Android Studio中統(tǒng)一管理版本號引用配置問題
這篇文章主要介紹了Android Studio中統(tǒng)一管理版本號引用配置問題,需要的朋友可以參考下2018-01-01詳解Android數(shù)據(jù)存儲之SQLCipher數(shù)據(jù)庫加密
對于已經(jīng)ROOT的手機(jī)來說的沒有任何安全性可以,一旦被利用將會導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)的泄漏,本篇文章主要介紹了Android數(shù)據(jù)存儲之SQLCipher數(shù)據(jù)庫加密,具有一定的參考價值,有需要的可以了解一下。2016-12-12Android Studio 3.1.X中導(dǎo)入項目的正確方法分享
這篇文章主要給大家介紹了關(guān)于Android Studio 3.1.X中導(dǎo)入項目的正確方法,文中一步步將解決的方法以及可能遇到的問題介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Android NDK開發(fā)的環(huán)境搭建與簡單示例
本文主要介紹Android NDK的知識,這里整理了相關(guān)資料,來說明如何搭建相應(yīng)環(huán)境和簡單實例,幫助大家理解,有興趣的小伙伴可以參考下2016-09-09