mImageView.setImageBitmap( b ); //把图片设置给 ImageView
}
}).start()
}
上面的代码会报错,你可能会说逻辑很正确啊,但是它违背了
Android 单线程模型:
Android UI 操作并不是线程安全的并且这些操作必须在 UI 线程中执行。
Andriod 提供了几种在其他线程中访问 UI 线程的方法:
Activity.runOnUiThread( Runnable )
View.post( Runnable )
View.postDelayed( Runnable, long )
2.Handler
Handler 在 android 里负责发送和处理消息。它的主要用途有:
1)按计划发送消息或执行某个 Runnanble(使用 POST 方法);
2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新 UI 线
程)
默认情况下,Handler 接受的是当前线程下的消息循环实例(使用
looper)、
一个消息队列可以被当前线程中的多个对象进行分发、处理(在
UI 线程中,系统已经有一
个
Activity 来处理了,你可以再起若干个 Handler 来处理)。在实例化 Handler 的时候,
Looper 可 以 是 任 意 线 程 的 , 只 要 有 Handler 的 指 针 , 任 何 线 程 也 都 可 以
sendMessage。Handler 对于 Message 的处理不是并发的。一个 Looper 只有处理完一
条
Message 才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里
不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送
Message(通过
sendMessges 方法),然后由 handleMessage()更新 UI)。
3.Handler 与 Async Task 的区别
Handler 和 AsyncTask。其中 AsyncTask 比 hander 更轻量级一些。在 Android1.5 中提