最经面试中,技术面试中有一个是Handler的消息机制,细细想想,我经常用到的Handler无非是在主线程(或者说Activity)新建一个Handler对象,另外一个Thread是异步加载数据,同时当他加载完数据后就send到主线程中的那个Handler对象,接着Handler来处理,刚才发送的一些消息。
1 public class HandlerTestActivity extends Activity { 2 private TextView tv; 3 private static final int UPDATE = 0; 4 private Handler handler = new Handler() { 5 6 @Override 7 public void handleMessage(Message msg) { 8 // TODO 接收消息并且去更新UI线程上的控件内容 9 if (msg.what == UPDATE) { 10 // Bundle b = msg.getData(); 11 // tv.setText(b.getString("num")); 12 tv.setText(String.valueOf(msg.obj)); 13 } 14 super.handleMessage(msg); 15 } 16 }; 17 18 /** Called when the activity is first created. */ 19 @Override 20 public void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.main); 23 tv = (TextView) findViewById(R.id.tv); 24 25 new Thread() { 26 @Override 27 public void run() { 28 // TODO 子线程中通过handler发送消息给handler接收,由handler去更新TextView的值 29 try { 30 for (int i = 0; i < 100; i++) { 31 Thread.sleep(500); 32 Message msg = new Message(); 33 msg.what = UPDATE; 34 // Bundle b = new Bundle(); 35 // b.putString("num", "更新后的值:" + i); 36 // msg.setData(b); 37 msg.obj = "更新后的值:" + i; 38 handler.sendMessage(msg); 39 } 40 } catch (InterruptedException e) { 41 e.printStackTrace(); 42 } 43 } 44 }.start(); 45 } 46 47 }