/** * 1,android为什么要在UI线程中修改UI? * 答:因为android的UI组件不是线程安全的,所以android使用UI线程(单线程)中来修改UI组件,确保UI组件不会被不同线程同一时间修改 * * 2,handler机制? * 答:又称消息机制,掌握消息机制需要了解5个对象: * Message:消息对象,可以携带数据,msg.what,msg.obj,创建的msg对象都会关联一个handler实例对象,所有即时有n个handler处理消 息,也不会乱套 * MessageQueue:消息队列,存放了msg的顺序,按照先进先出的顺序,给handlder分发处理,可以通过msg.when来设置时间 * Handler:分发,处理消息 * HandlerThread:负责调度消息循环,可以理解成为消息循环的场所 * Looper:消息泵,其实是一个阻塞的while循环,不断地从消息队列中提取消息,有消息需要处理,就调用msg.target.dispatchMessage(msg)分发消息,调用handleMessage(msg)处理消息 */ 方法一: new Thread(new Runnable() { @Override public void run() { handler.sendEmptyMessage(0); } }).start(); Handler handler = new Handler(){ public void handleMessage(Message msg) { if(msg.what==0){ //更新UI } }; }; 方法二: new Thread(new Runnable() { @Override public void run() { view_gril.post(new Runnable() { @Override public void run() { //更新UI } }); } }).start(); 方法三: runOnUiThread(new Runnable() { @Override public void run() { //更新UI } }); 方法四: private class MyAsyncTask extends AsyncTask<string void="" string="">{ @Override protected String doInBackground(String... params) { return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); //更新UI } new MyAsyncTask().execute("");