在子线程中更改主线程中的控件的信息,在子线程中用toast
一丶在子線程中不允許更改主線程中的控件的信息,也不允許在子線程中用toast,我們要更改的話
(1)消息機(jī)制:使用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主線程中運(yùn)行
? playAtTime() : 在某個(gè)時(shí)間運(yùn)行
? playDelay(): 延時(shí)運(yùn)行
例: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) ;???
?? ?}
}
轉(zhuǎn)載于:https://blog.51cto.com/2585211/1669879
總結(jié)
以上是生活随笔為你收集整理的在子线程中更改主线程中的控件的信息,在子线程中用toast的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Gallery组件实现循
- 下一篇: [.net 面向对象程序设计进阶] (2