Message message = Message.obtain(); message.arg1 = 1; message.arg2 = 2; message.obj = "Demo"; message.what = 3; Bundle bundle = new Bundle(); bundle.putString( "name","Lucy"); message.setData(bundle);
下面贴上一段示例代码(开启新线程实现电子广告牌)
public class MainActivity extends Activity implements Runnable {
private ImageView iv;
private TextView tv;
private Handler handler;
private int[] path = new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,
R.drawable.img05,R.drawable.img06};
private String[] private int index =0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.imageView1);
tv = (TextView) findViewById(R.id.textView1);
Thread t = new Thread(this);
t.start();
handler = new Handler(){
public void handleMessage(Message msg){
if (msg.what ==1) {
tv.setText(msg.getData().getString("title"));
iv.setImageResource(path[msg.arg1]);
}
super.handleMessage(msg);
}
};
}
@Override
public void run() {
while(!Thread.currentThread().isInterrupted()){
index = new Random().nextInt(path.length);
Message m = handler.obtainMessage();
m.arg1 = index;
Bundle bundle = new Bundle();
m.what = 1;
bundle.putString("title", title[index]);
m.setData(bundle);
handler.sendMessage(m);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
四、AsyncTask异步任务的用法
- AsyncTask实际上是一个线程池,在代码上比handler要轻量级但是实际上要比Handler要耗资源,Handler仅仅发送了一个消息队列,连线程池对没有开。










