Android 中Handler的初步使用
在Android 中要渲染UI就必須在主線程中,而常常耗時操作卻又不得不開子線程,子線程中不能渲染UI,所以有了handler,handler在主線程中是一個類似協程一樣的東西,在保持一個死循環輪詢,當沒有消息時處於一個阻塞狀態,有消息時就回調收到消息時的函數。所以可以把子線程中的消息傳遞給 handler 由handler在主線程中來改變UI。
快速使用:
int num=0; final Handler handler = new Handler (){ @Override public void handleMessage(Message msg) { //收到消息后的回調函數 super.handleMessage (msg); // Log.d (TAG, "handleMessage: "+msg.what); if(msg.what==1001){ tv1.setText(num+"");//改ui } } }; //子線程中發消息 new Thread() { public void run() { while (true){ try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } num+=1; handler.sendEmptyMessage (1001); } } }.start();
以上就可以快速使用,但只能修改為預設的num。
下面可以傳遞字符串消息:
Android Handler Message 傳遞字符串:
msg.what:
private static final int NETUPDATE = 10 ;
Handler接收部分:
private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case NETUPDATE: parseIni(( String ) msg.obj); break ; }
發送部分:
Message tempMsg = mHandler.obtainMessage(); tempMsg.what = NETUPDATE; tempMsg.obj = buffer.toString(); mHandler.sendMessage(tempMsg);
