您好,登錄后才能下訂單哦!
一丶在子線程中不允許更改主線程中的控件的信息,也不允許在子線程中用toast,我們要更改的話
(1)消息機制:使用handler
(由主線程調(diào)用)
在主程序中Handler handler = new Handler(){
public void handleMessage(Message msg){
int type = msg.what ;//拿到msg的類型,再判斷
switch (type) {
case SUCCESS:
//拿到信息
String info = (String)msg.obj ;
//
break;
case FAILED:
//拿到信息
String faild = (String)msg.obj ;
Toast.makeText(MainActivity.this, faild, 0).show() ;
break;
case ERROR:
//拿到信息
String error = (String)msg.obj ;
Toast.makeText(MainActivity.this, error, 0).show() ;
break;
}
};
};
而在子線程中要設(shè)置Message msg;
msg.what(設(shè)置類型)
msg.obj(設(shè)置內(nèi)容)然后發(fā)送:handler.sendMessage(msg);
(2)常見消息處理api:
runOnUiThread(runnable): 在ui主線程中運行
playAtTime() : 在某個時間運行
playDelay(): 延時運行
例:public class MainActivity extends Activity {
private TextView tvinfo ;
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
System.out.println("接收到了消息");
tvinfo.setText((String)msg.obj) ;
};
} ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvinfo = (TextView) findViewById(R.id.tvinfo) ;
}
public void click(View view){
handler.postDelayed(new Runnable() {
@Override
public void run() {
Message msg = Message.obtain() ;
msg.obj = "哈哈哈,我改變了UI上的內(nèi)容" ;
handler.sendMessage(msg) ;
}
}, 3000) ;
}
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。