在子线程中更改主线程中的控件的信息,在子线程中用toast-创新互联
一丶在子线程中不允许更改主线程中的控件的信息,也不允许在子线程中用toast,我们要更改的话
专注于为中小企业提供网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业武邑免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。(1)消息机制:使用handler
(由主线程调用)
在主程序中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;
}
};
};
而在子线程中要设置Message msg;
msg.what(设置类型)
msg.obj(设置内容)然后发送: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上的内容" ;
handler.sendMessage(msg) ;
}
}, 3000) ;
}
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:在子线程中更改主线程中的控件的信息,在子线程中用toast-创新互联
转载来于:http://pwwzsj.com/article/dgoocs.html