老問題:Android子執行緒中更新UI的3種方法
在Android專案中經常有碰到這樣的問題,在子執行緒中完成耗時操作之後要更新UI,下面就自己經歷的一些專案總結一下更新的方法:
方法一:用Handler
1、主執行緒中定義Handler:
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //完成主介面更新,拿到資料 String data = (String)msg.obj; updateWeather(); textView.setText(data); break; default: break; } } };
2、子執行緒發訊息,通知Handler完成UI更新:
private void updateWeather() { new Thread(new Runnable(){ @Override public void run() { //耗時操作,完成之後傳送訊息給Handler,完成UI更新; mHandler.sendEmptyMessage(0); //需要資料傳遞,用下面方法; Message msg =new Message(); msg.obj = "資料";//可以是基本型別,可以是物件,可以是List、map等; mHandler.sendMessage(msg); } }).start(); }
方法一的Handler物件必須定義在主執行緒中,如果是多個類直接互相呼叫,就不是很方便,需要傳遞content物件或通過介面呼叫;
方法二:用runOnUiThread更新
在子執行緒中通過runOnUiThread()方法更新UI:
new Thread() { public void run() { //這兒是耗時操作,完成之後更新UI; runOnUiThread(new Runnable(){ @Override public void run() { //更新UI imageView.setImageBitmap(bitmap); } }); } }.start();
如果在非上下文類中(Activity),可以通過傳遞上下文實現呼叫;
Activity activity = (Activity) imageView.getContext(); activity.runOnUiThread(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } });
這種方法使用比較靈活,但如果Thread定義在其他地方,需要傳遞Activity物件;
方法三:View.post(Runnable r)
imageView.post(new Runnable(){ @Override public void run() { imageView.setImageBitmap(bitmap); } });
這種方法更簡單,但需要傳遞要更新的View過去;
相關文章
- 如何在子執行緒中更新UI執行緒UI
- Android新執行緒中更新主執行緒UI中的View方法彙總Android執行緒UIView
- Android複習之旅--子執行緒更新UIAndroid執行緒UI
- Android子執行緒真的不能更新UI麼Android執行緒UI
- 子執行緒 UI 問題捉蟲執行緒UI
- Android的Activity啟動與子執行緒更新UIAndroid執行緒UI
- Android 不能在子執行緒中更新 UI 的討論和分析Android執行緒UI
- Android中UI執行緒與後臺執行緒互動設計的5種方法AndroidUI執行緒
- Android中子執行緒更新主執行緒UI和ProgressBar的應用Android執行緒UI
- android 關於關於子執行緒更新UI的一些事Android執行緒UI
- 模板方法中的執行緒安全問題執行緒
- Android中子執行緒真的不能更新UI嗎?Android執行緒UI
- Android 中子執行緒真的不能更新UI嗎?Android執行緒UI
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- Android 子執行緒 UI 操作真的不可以?Android執行緒UI
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- android 建立多執行緒的幾種方法Android執行緒
- 子執行緒使用父執行緒RequestScope作用域Bean問題的探究執行緒Bean
- 在子執行緒中建立新的窗體,遇到的問題。執行緒
- JAVA中執行緒建立的2種方法Java執行緒
- parallelStream中的執行緒安全問題Parallel執行緒
- 執行緒中斷以及執行緒中斷引發的那些問題執行緒
- Android執行緒篇(一)實現執行緒的幾種方法及區別Android執行緒
- Android 判斷當前執行緒是否是主執行緒的兩種方法Android執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- lambda中stream執行緒安全的問題執行緒
- 在netty3.x中存在兩種執行緒:boss執行緒和worker執行緒。Netty執行緒
- 為何要在主執行緒上更新UI執行緒UI
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 執行緒問題執行緒
- 深入分析3種執行緒池執行任務的邏輯方法執行緒
- 解決EventBus中接收方法中無法更新UI的問題UI
- JUC之集合中的執行緒安全問題執行緒
- Java多種方法實現等待所有子執行緒完成再繼續執行Java執行緒
- Android中Sqlite資料庫多執行緒併發問題AndroidSQLite資料庫執行緒
- Android中的執行緒池Android執行緒