Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式.doc
文本预览下载声明
android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存 下面看他们的理解。[size=1.8em]Handler+Runnable模式
我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式。
这里为何不是新开线程的原因请参看这篇文章:Android Runnable 运行在那个线程 这里的代码其实是在UI 主线程中下载图片的,而不是新开线程。
我们运行下面代码时,会发现他其实是阻塞了整个界面的显示,需要所有图片都加载完成后,才能显示界面。
?
代码片段,双击复制01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 packageghj1976.AndroidTest;
importjava.io.IOException;
.URL;
importandroid.app.Activity;
importandroid.graphics.drawable.Drawable;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.SystemClock;
importandroid.util.Log;
importandroid.widget.ImageView;
publicclassMainActivityextendsActivity {
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
loadImage(/img/baidu_logo.gif, R.id.imageView1);
loadImage(img id=\aimg_7Va0b\onclick=\zoom(this,this.src,=0,=0)\= class=\zoom\ file=\/images/logo_new.gif\ onmouseover=\img_onmouseoverfunc(this)\ onload=\thumbImg(this)\ border=\0\ alt=\\ src=\/images/logo_new.gif\ lazyloaded=true,
R.id.imageView2);
loadImage(/30d/img/web/logo.gif, R.id.imageView3);
loadImage(/www/images/csdnindex_logo.gif,
R.id.imageView4);
loadImage(/logo_small.gif,
R.id.imageView5);
}
privateHandler handler =newHandler();
privatevoidloadImage(finalString url,finalintid) {
handler.post(newRunnable() {
publicvoidrun() {
Drawable drawable =null;
try{
drawable = Drawable.createFromStream(
newURL(url).openStream(),i
显示全部