在Android中,關於UI的管理是在主線程中進行的。但咱們常常遇到須要在子線程中更新UI的狀況,因此可使用Handler與Message來完成。ide
Handler在主線程中,負責處理消息,Message能夠在子線程中發送消息。因此子線程中更新UI的思路就是:在子線程中發送Message,由Handler接受處理,而Handler在主線程中,因此能夠更新UI。this
兩種方法:一、實例化一個Handler對象並重載handleMessage方法。二、定義本身的Handler類繼承自Handler並重寫handleMessage方法。spa
Show me the code線程
private Handler mHandler = new Handler(){
public void handleMessag(Message mes){
super.handleMessage(mes);
//這裏作你想作,隨心所欲
switch(mes.what){//我在這裏經過判斷mes的類型作不一樣的操做。
case 0:{
String text = (String) mes.obj;
Toast.makeText(MainActivity.this,text,Toast.LENGTH_LONG);break;
}
default:break;
}
}
};
複製代碼
固然,你在Android Studio中寫下這段代碼,會報一個警告,咱們以後再說翻譯
在須要發送消息的地方咱們實例化Message對象並設置好參數就能夠發送了。code
Code警告cdn
Message mes = new Message();
mes.what = 0;
mes.obj = text;//text就是你想要傳遞的參數
handler.sendMessage(mes);
複製代碼
Message中還有其餘實用的方法,例如void setData(Bundle data),能夠在message中傳遞bundle,能夠說是很負責了。對象
//警告雖然能夠忽略,可是可能會形成意想不到的後果。但願你們之後也要注意處理一下警告。blog
首先咱們來看一下警告的內容排序
This Handler class should be static or leaks might occur
以後還有具體的警告信息。總之這條警告的大概意思是:因爲這個Handler class 被聲明爲內部類,因此可能會引發內存泄漏,應該聲明爲static。
關於內存泄漏的解釋,我用萌新語翻譯一下就是:咱們這麼寫,未來內存泄漏出現誤差,咱們要負責任的。嗯..其實這樣說的,Handler在主線程中,咱們要是想退出MainActivity,可是Handler萬一還在等着消息呢,Android又不忍心傷害一個在家中苦苦等待本身在外工做的老公的Handler的心,因此說MainActivity我去買幾個橘子,你就在內存中等罷不要onDestroy。後果呢,就是可能內存泄漏了。
但其實關於這個警告,Android Framework 的工程師 Romain Guy早已經給出了本身的建議寫法。咱們來看看:
private static class MyHandler extends Handler{
private final WeakReference<MainActivity> mActicity;
public MyHandler(MainActivity activity){
mActicity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message mes){
super.handleMessage(mes);
MainActivity activity = mActicity.get();
if(activity != null){
switch (mes.what){
case 0:
String text = (String) mes.obj;
Toast.makeText(MainActivity.this,text,Toast.LENGTH_LONG);break;
default:break;
}
}
}
}
複製代碼
官方解決,O了個冒泡排序K。
//做爲Android開發的初學者,若是我有錯誤的地方或者不足的話歡迎你們指正。