Handler消息传递机制(一)
2015-01-29 16:32
176 查看
MessageQueue:由Looper负责管理。采用先进先出的方式管理Message.
Looper:每个线程只有一个Looper,负责管理MessageQueue,会不断从MessageQueue中取出消息,并将消息分给对应的Handler处理
Handler:能把消息发送给Looper管理的MessageQueue,并负责处理Looper分给它的消息(在新启动的线程中发送消息;在主线程中获取、处理消息)
声明访问网络权限
<uses-permission android:name="android.permission.INTERNET"/>
Looper:每个线程只有一个Looper,负责管理MessageQueue,会不断从MessageQueue中取出消息,并将消息分给对应的Handler处理
Handler:能把消息发送给Looper管理的MessageQueue,并负责处理Looper分给它的消息(在新启动的线程中发送消息;在主线程中获取、处理消息)
声明访问网络权限
<uses-permission android:name="android.permission.INTERNET"/>
package com.example.handler; import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; 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.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { private Button button; private ImageView imageView; private String image_path = "http://pic4.nipic.com/20090828/2366808_092035042961_2.jpg"; public final int IS_FINISH = 1; private ProgressDialog dialog = null; private Handler handler = new Handler(){ public void handleMessage(Message msg){ byte[] data = (byte[]) msg.obj; Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bm); if(msg.what == IS_FINISH){ dialog.dismiss(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); imageView = (ImageView) findViewById(R.id.imageView1); dialog = new ProgressDialog(this); dialog.setTitle("提示"); dialog.setMessage("正在下载,请稍后..."); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new Thread(new MyThread()).start(); dialog.show(); } }); } public class MyThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(image_path); try { HttpResponse httpResponse = httpClient.execute(httpGet); if(httpResponse.getStatusLine().getStatusCode() == 200){ byte[] data = EntityUtils.toByteArray(httpResponse.getEntity()); /* * 建议用Message.obtain()而不是new一个Message;会先从消息池中获取 * 一个Message以便重复利用,消息池里没有才会new一个Message */ Message msg = Message.obtain(); //可传两个整形、一个对象过去,字节数组也是一个对象 msg.obj = data; msg.what = IS_FINISH; handler.sendMessage(msg); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章推荐
- Android Handler类消息传递机制(三)不同类中使用Handler
- Android 的消息机制(Handler消息传递机制)
- Android Handler消息传递机制
- android studio for android learning (十九 ) 最新Handler消息传递机制全解
- 3.5 Handler消息传递机制
- Android 多线程编程:Handler消息传递机制—刷新UI主界面
- [置顶] 温故知新.Handler消息传递机制.
- 学习Android Handler消息传递机制
- android学习13#--Handler消息传递机制
- Handler消息传递机制
- android线程消息传递机制——Looper,Handler,Message
- 消息传递机制之Handler使用总结
- Handler 消息传递机制的理解与学习
- Android中的消息机制:Handler消息传递机制
- Android 中 Handler 消息传递机制
- Android消息传递之Handler消息机制
- Handler消息传递机制
- Android Handler消息传递机制
- Handler消息传递处理机制
- 解析Android的 消息传递机制Handler