Thread与Handler

好吧,废话就少说了。开始觉着这个线程真的就不费事,后来,到现在。。。嘿嘿,要是牵涉到一些活跃的赋值以及得到东西,为了线程的安全,好像我们都离不开它哦!

今天,不是要做一个可以从网上动态获取数据的应用嘛,所以,这里在获取网络图片的时候,我遇到一个问题:

first:网络图片都是URl的,而我等待赋值的这些控件除了ImageView还有Button以及布局。。。。imageview以及button还好说咯可是布局呢?

也就是说这里必须要将Url转换成Drawable类型的。

而且是获得多张,于是,我是这样打算的:

先定义一个数组,然后将这些url全部写出来,然后将他转换成drawable类型的,然后再利用handler去更新界面。。。。不错不错。。。

其实网上有很多这样关于这两者的代码,可是就是木有获取一连串的字符(url)然后来进行转换的。所以,就记下来了,方便自己,也方便大家嘛。。。

  


public class MyThread extends Thread {
String[] str = {
WelcomeActivity.getstyleResponse.items.appStoreTheme.appStoreLogoImg,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appStoreBackImg,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appStoreListimg,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appStoreListfocusimg,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appListonfocusimg,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appListFloat,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appInfoFloat,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appBoxBorderColor,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appBoxBgColor,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appBorFocusColor,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appBiFocuscolor,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appLeft,
WelcomeActivity.getstyleResponse.items.appStoreTheme.appRight };

@Override
public void run() {
for (int i = 0; i < str.length; i++) {

try {
URL url = new URL(str[i]);
try {
bitmap = BitmapFactory.decodeStream(url.openStream());

bd = new BitmapDrawable(bitmap);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message message = new Message();
message.obj = bd;
System.out.println("this image message is====>" + bd);
message.what = i;
System.out.println("this image message what is====>" + i);
mhand.sendMessage(message);

}
msgHandler.sendEmptyMessageDelayed(0, 1 * 1000);
}

}

class mHandler extends Handler {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (acache.getAsDrawable("1") == null) {
layoutDraw = ((BitmapDrawable) msg.obj);
// mlLayout.setBackground((BitmapDrawable) msg.obj);
System.out
.println("RRRRRRRRRRRthis layoutdraw is==========>"
+ layoutDraw);
} else {
layoutDraw = (BitmapDrawable) acache.getAsDrawable("1");
// mlLayout.setBackground(acache.getAsDrawable("1"));
System.out
.println("RRRRRRRRRRRthis layoutdraw is==========>"
+ layoutDraw);
}

break;
case 2:
isNomal = (BitmapDrawable) msg.obj;
System.out.println("11111111111111 nomale is ====>" + isNomal);
// MyArrayAdapter.getImg(bd, 2);
break;
case 3:
isfouce = (BitmapDrawable) msg.obj;
System.out.println("222222222222 fouce is ====>" + isfouce);

// MyArrayAdapter.getImg(bd, 3);
break;
case 4:
isSelected = (BitmapDrawable) msg.obj;
System.out.println("3333333333333333 selected is ====>"
+ isSelected);
// MyArrayAdapter.getImg(bd, 4);
break;
case 5:

break;
case 6:
if (acache.getAsDrawable("6") == null) {

DetailDraw = ((BitmapDrawable) msg.obj);
// detail.setBackground((BitmapDrawable) msg.obj);
// detailInfo.setBackground((BitmapDrawable) msg.obj);
System.out
.println("66666666666666666 is the detail is is ====>"
+ DetailDraw);
} else {

DetailDraw = (BitmapDrawable) acache.getAsDrawable("6");
// detail.setBackground((BitmapDrawable) acache
// .getAsDrawable("6"));
// detailInfo.setBackground((BitmapDrawable) acache
// .getAsDrawable("6"));
System.out.println("66666666666666666666 else is ====>"
+ DetailDraw);
}

break;
// color of the image
case 8:
break;
// color of the image
case 10:
break;
case 11:
DetailInfoFragment.getImg(bd, 11);
break;
case 12:
DetailInfoFragment.getImg(bd, 12);
break;

}
}
};

这里面的代码 我是完全没做修改了!嘿嘿,看懂了就懂了,其实我这个循环可能会很累赘,大家有什么好的,提提咯!期待。。。

时间: 2024-07-30 16:30:25

Thread与Handler的相关文章

Android使用Thread加Handler实现计时与保持屏幕唤醒不熄灭

这两天工作比较忙,没有时间更新博客.今天难得闲下来,总结一下之前写的一个Demo,用到了两个小知识点:一是使用Thread加Handler实现计时,二是控制屏幕唤醒不熄灭. 首先是计时,首先我使用单纯的Handler来实现计时,代码如下: Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { timeSec ++; mTimeCount.setText

Android网络编程-Thread和Handler(三)

客户端:Thread和Handler MainActivity.java package com.example.justyu.login_demo; import android.app.Activity; import android.app.ProgressDialog; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import 

Android使用自己封装的Http和Thread、Handler实现异步任务

目录结构如下: Http协议的封装: 使用http协议有request和response这两个主要的域,下边是Http协议封装的结构图 (1)HttpRequestInter.java:作为request域对象,应该可以获得客户端请求的地址和httpRequest对象,这样的话才可以获得客户端请求的参数等信息:另外public HttpResponseInter request() throws Exception; 使用这个方法,是当执行完request请求之后,返回一个response对象(

Android中Thread、Handler、Looper、MessageQueue的原理分析

在Android开发当中,Thread.Handler.Looper这几个类是特别常见,在刚开始学习Android的时候对这些类可能并不是很清晰.下面我们就一起从源码的角度剖析一下这几个类的工作原理. Thread 首先是Thread, 我们都知道一个Thread就是一个线程对象,只要在run方法中填写自己的代码然后启动该线程就可以实现多线程操作.例如 : new Thread(){ public void run() { // 耗时的操作 }; }.start(); 我们知道,针对上面的代码中

Thread、Handler与HandlerThread、Handler使用

Handler会关联一个单独的线程和消息队列.Handler默认关联主线程,虽然要提供Runnable参数,但默认是直接调用Runnable中的run()方法.也就是默认下会在主线程执行,如果在这里面的操作会有阻塞,界面也会卡住.如果要在其他线程执行,可以使用HandlerThread. HandlerThread继承于Thread,所以它本质就是个Thread.与普通Thread的差别就在于,主要的作用是建立了一个线程,并且创立了消息队列,有来自己的looper,可以让我们在自己的线程中分发和

Android中的Handler, Looper, MessageQueue和Thread

Android中的Handler, Looper, MessageQueue和Thread 前几天,和同事探讨了一下Android中的消息机制,探究了消息的发送和接收过程以及与线程之间的关系.虽然我们经常使用这些基础的东西,但对于其内部原理的了解,能使我们更加容易.合理地架构系统,并避免一些低级错误. 对于这部分的内容,将分成4小节来描述: 1.职责与关系 2.消息循环 3.线程与更新 4.几点小结 ------------------------------------------------

Android Thread Handler UIHandler demos

extends:http://blog.csdn.net/superjunjin/article/details/7540064 序效果:为了显示如何用message传值的简单例子 例1,点击按钮,持续显示当前系统时间(bundle传值,耗时,效率低) 例2,点击按钮,progressbar持续前进(message方法传值,效率高,但只能传整型int和对象object) 例1,主activity  package com.song; import java.text.SimpleDateForm

Android : Can&#39;t create handler inside thread that has not called Looper.prepare()

又报错了,不过早也习以为常了. Can't create handler inside thread that has not called Looper.prepare() 我把文档给摘录下来了,大家可以看看. 这个类被用于为线程运行消息循环.默认线程并没有消息循环与之关联,所以你需要创建一个,在线程中调用prepare()以运行这个循环,然后调用loop()在循环结束时获取进程信息. 和消息循环交互最多的就是通过Handler类. 下面是一个实现了Looper线程的典型实例,通过分离的pre

Android开发之异步具体解释(一)Thread+Handler

请尊重他人的劳动成果,转载请注明出处:  Android开发之异步具体解释(一)Thread+Handler http://blog.csdn.net/fengyuzhengfan/article/details/40211589 在Android实际开发project中常常会进行一些诸如:文件读写.訪问网络等耗时的操作,这些耗时的操作是不建议放到UI线程里的. 所以我们会新开一个线程.在子线程中进行这些耗时的操作.耗时操作过程中.UI常常须要更新,但Android是不同意在子线程中改动UI的.