1. Android的UI時(shí)線程不安全的,如果在子線程中更新UI會(huì)出現(xiàn)異常,導(dǎo)致程序崩潰。
為了解決如上這些問題苍糠,我們常用的做法就是使用Android的異步消息機(jī)制實(shí)現(xiàn)即可(創(chuàng)建一個(gè)Message對(duì)象,使用Handler發(fā)送出去啤誊,然后在Handler的handleMessage()方法中獲得剛才發(fā)送的Message對(duì)象椿息,然后在這里進(jìn)行UI操作)。所以說(shuō)還是很有必要了解異步消息機(jī)制的Looper , Handler , Message等原理的坷衍。
下面展示一個(gè)示例使用寝优,然后通過(guò)源碼分析吧。
public class MainActivity extends Activity
{
public static final int UPDATE_TEXT = 1;
private TextView text;
private Button changeText;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case UPDATE_TEXT:
text.setText("Nice yo seeyou again");
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
changeText = (Button) findViewById(R.id.change_text);
//changeText.setOnClickListener(this);
changeText.setOnClickListener(newOnClickListener() {
@Override
public void onClick(View view) {
switch ((view.getId())){
case R.id.change_text:
new Thread(new Runnable(){
@Override
public void run() {
//若直接更新TextView的內(nèi)容會(huì)報(bào)錯(cuò)枫耳,下面使用異步消息處理機(jī)制
//text.setText("Nice to see you,BUG");
Message message = new Message();
message.what =UPDATE_TEXT;
handler.sendMessage(message);
}
}).start();
break;
default:
break;
}
}
});
}
}
這里我們先是定義了一個(gè)整型常量UPDATE_TEXT乏矾,用于表示更新TextView這個(gè)動(dòng)作。然后新增一個(gè)Handler對(duì)象迁杨,并重寫父類的handleMessage方法钻心,在這里對(duì)具體的Message進(jìn)行處理。如果發(fā)現(xiàn)Message的what字段的值等于UPDATE_TEXT铅协,就將TextView顯示的內(nèi)容改成Nice to see you again捷沸。
下面再來(lái)看一下Change Text按鈕的點(diǎn)擊事件中的代碼『罚可以看到痒给,這次我們并沒有在子線程里直接進(jìn)行UI操作,而是創(chuàng)建了一個(gè)Message(android.os.Message)對(duì)象骏全,并將它what字段的值指定為UPDATE_TEXT苍柏,然后調(diào)用Handler的sendMessage()方法將這Message發(fā)送出去。很快姜贡,Handler就會(huì)收到這條Message试吁,并在handleMessage()方法中對(duì)它進(jìn)行處理。注意此時(shí)handleMessage()方法中的代碼就是在主線程當(dāng)中運(yùn)行的了楼咳,所以我們可以放心地在這里進(jìn)行UI操作熄捍。接下來(lái)對(duì)Message攜帶的what字段的值進(jìn)行判斷,如果等于UPDATE_TEXT母怜,就將TextView顯示的內(nèi)容改成Nice to see you again余耽。
常用的APP在線自動(dòng)化測(cè)試工具:www.ineice.com