Android子執行緒中更新UI的4種方法

2021-08-20 21:09:46 字數 1205 閱讀 1066

方法一:用handler

1、主線程中定義handler: 

handler mhandler = new handler()   

} };

2、子執行緒發訊息,通知handler完成ui更新: 

private void updateweather()          

}).start();

}

方法一的handler物件必須定義在主線程中,如果是多個類直接互相呼叫,就不是很方便,需要傳遞content物件或通過介面呼叫; 

方法二:用activity物件的runonuithread方法更新

在子執行緒中通過runonuithread()方法更新ui: 

new thread()   

});

} }.start();

如果在非上下文類中(activity),可以通過傳遞上下文實現呼叫; 

activity activity = (activity) imageview.getcontext();  

activity.runonuithread(new runnable()

});

這種方法使用比較靈活,但如果thread定義在其他地方,需要傳遞activity物件; 

方法三:view.post(runnable r)

imageview.post(new runnable()  

});

這種方法更簡單,但需要傳遞要更新的view過去; 

方法四:asynctask

//ui執行緒中執行    

new downloadimagetask().execute( "www.91dota.com" );

private class downloadimagetask extends asynctask

protected void onpostexecute( string result )

}

總結:ui的更新必須在主線程中完成,所以不管上述那種方法,都是將更新ui的訊息傳送到了主線程的訊息物件,讓主線程做處理;

android 子執行緒更新UI例項

package com.example.test0207 handler import android.os.bundle import android.os.handler import android.os.message import android.view.menu import andr...

Android 在子執行緒中更新主線程UI

最近發現以前在eclipse中使用的runonuithread在studio中不能使了,所以又找了幾個更新ui的方法 第一種方法 new handler context.getmainlooper post new runnable 第二種方法 如果當前執行緒是ui執行緒,那麼行動是立即執行。如果當...

Android之在子執行緒更新UI 一

方法一 用handler 1 主線程中定義handler handler mhandler new handler 2 子執行緒發訊息,通知handler完成ui更新 private void updateweather start 方法一的handler物件必須定義在主線程中,如果是多個類直接互相...