package com.example.messagedemo2;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener
{
protected static final int TEST = 1;
protected static final String TAG = "MainActivity";
private Button but = null;
private Handler myHandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
switch (msg.what)
{
case TEST:
//可以执行UI操作
Log.i(TAG,(String)msg.obj);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but = (Button) findViewById(R.id.but);
but.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
if(v.getId() == R.id.but)
{
new Thread(new Runnable()
{
@Override
public void run()
{
//TODO 执行耗时任务
Message msg = Message.obtain();
msg.what = TEST;
msg.obj = "Rowandjj";
// msg.setTarget(myHandler);//如果不设置target那么调用sendToTarget将抛空针
// msg.sendToTarget();//其实是调用target也就是handler的sendMessage方法
myHandler.sendMessage(msg);//让handlet处理message
}
}).start();
}
}
}
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}需要注意的是,一个线程只能创建一个Looper对象,如果有多个Looper,将会抛Runtime异常,异常信息是这样的:Only one Looper may be created per thread。package com.example.messagedemo1;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
/**
* @author Rowand jj
*
*一个使用handler+thread的简单示例
*下载网络图片
*/
public class MainActivity extends Activity implements OnClickListener
{
protected static final String PATH = "http://c.hiphotos.baidu.com/image/w%3D2048/sign=4facebbeb0b7d0a27bc9039dffd77709/8d5494eef01f3a29cf6d52c29b25bc315c607c11.jpg";
protected static final int SET_IMAGE = 1;
private Button but_load = null;
private ImageView iv_show = null;
private ProgressBar pb = null;
private Handler myhandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
if(msg.what == SET_IMAGE)
{
iv_show.setImageBitmap((Bitmap) msg.obj);
pb.setVisibility(View.GONE);
iv_show.setVisibility(View.VISIBLE);
but_load.setVisibility(View.VISIBLE);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_show = (ImageView) findViewById(R.id.iv_show);
but_load = (Button) findViewById(R.id.but_load);
but_load.setOnClickListener(this);
pb = createProgressBar();
}
@Override
public void onClick(View v)
{
if(v.getId() == R.id.but_load)
{
pb.setVisibility(View.VISIBLE);
iv_show.setVisibility(View.GONE);
but_load.setVisibility(View.GONE);
new Thread(new Runnable()
{
@Override
public void run()
{
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(PATH);
try
{
HttpResponse resp = client.execute(get);
if(resp.getStatusLine().getStatusCode() == 200)
{
HttpEntity entity = resp.getEntity();
if(entity != null)
{
byte[] data = EntityUtils.toByteArray(entity);
Options opts = new Options();
opts.inSampleSize = 2;
final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,data.length,opts);
myhandler.post(new Runnable()
{
@Override
public void run()
{
iv_show.setImageBitmap(bitmap);
pb.setVisibility(View.GONE);
iv_show.setVisibility(View.VISIBLE);
but_load.setVisibility(View.VISIBLE);
}
});
}
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
}
}
public ProgressBar createProgressBar()
{
FrameLayout rootContainer = (FrameLayout) findViewById(android.R.id.content);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
ProgressBar pb = new ProgressBar(this);
pb.setLayoutParams(params);
pb.setVisibility(View.GONE);
rootContainer.addView(pb);
return pb;
}
}
Message msg = Message.obtain(myhandler,SET_IMAGE,bitmap); msg.sendToTarget();或者是这样:
Message msg = myhandler.obtainMessage(SET_IMAGE,bitmap); msg.sendToTarget();
Message msg = Message.obtain(myhandler,SET_IMAGE,bitmap); myhandler.sendMessage(msg);
【安卓笔记】Handler+Thread使用浅析,布布扣,bubuko.com
原文:http://blog.csdn.net/chdjj/article/details/20134653