在子线程中更改主线程中的控件的信息,在子线程中用toast
一丶在子線程中不允許更改主線程中的控件的信息,也不允許在子線程中用toast,我們要更改的話
(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) ;???
?? ?}
}
轉載于:https://blog.51cto.com/2585211/1669879
總結
以上是生活随笔為你收集整理的在子线程中更改主线程中的控件的信息,在子线程中用toast的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Gallery组件实现循
- 下一篇: [.net 面向对象程序设计进阶] (2