Android编程学习之Message处理Handler
来源:互联网 发布:js 弧线 编辑:程序博客网 时间:2024/06/07 20:23
Android编程学习之Message处理Handler
- 1.实例化Handler对象,并重写void handleMessage(Message msg)方法:
Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if(msg.what==1) { byte[] data = (byte[]) msg.obj; Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bm); } }};
- 2.在程序中定义并发送Message:
Message message = handler.obtainMessage();message.arg1=1;message.arg2=2;message.obj=data;message.what=1;handler.sendMessage(message);
也可以使用如下方法延迟10ms发送:
handler.sendMessageDelayed(handler.obtainMessage(int what,Object obj), 10);
- 例子1 android_handler_downloadimage MainActivity.java: :
package com.example.android_handler_downloadimage;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.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.app.ProgressDialog;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.Menu;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 ProgressDialog dialog; private int IS_COMPLETE = 0; private static final String PATH = "http://10.0.2.2:8080/MyFirstWeb/mm.jpeg"; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if (msg.what == 1) { byte[] data = (byte[]) msg.obj; Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bm); if (IS_COMPLETE == 1) { dialog.dismiss(); } } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) this.findViewById(R.id.imageView1); dialog = new ProgressDialog(this); dialog.setTitle("提示"); dialog.setMessage("Loading..."); button = (Button) this.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub dialog.show(); new Thread(new MyThread()).start(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(PATH); try { HttpResponse response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == 200) { byte[] data = EntityUtils.toByteArray(response.getEntity()); Message message = handler.obtainMessage(); message.arg1 = 1; message.arg2 = 2; message.obj = data; message.what = 1; handler.sendMessage(message); IS_COMPLETE = 1; } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { httpClient.getConnectionManager().shutdown(); } } }}
- 例子2 android_handler_textview MainActivity.java::
package com.example.android_handler_textview;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity{ private Button button; private TextView textView; private MyHandler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handler = new MyHandler(); textView = (TextView) this.findViewById(R.id.textView1); button = (Button) this.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub new Thread(new MyThread()).start(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } class MyHandler extends Handler { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); textView.append((String) msg.obj + msg.arg1); } } class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub int i = 1; while (i <= 20) { try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message message = handler.obtainMessage(); message.arg1 = i; message.obj = "Tom"; i++; handler.sendMessage(message); } } }}
- 例子3 android_handler_progressdialog MainActivity.java::
package com.example.android_handler_progressdialog;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.app.ProgressDialog;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity{ private Button button; private ProgressDialog dialog; private MyHandler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); handler = new MyHandler(); dialog = new ProgressDialog(this); dialog.setTitle("下载进度"); dialog.setMessage("Loading..."); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); button = (Button) this.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub dialog.show(); new Thread(new MyThread()).start(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } class MyHandler extends Handler { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); dialog.setProgress(msg.arg1); dialog.setSecondaryProgress(msg.arg2); if (msg.what == 1) { dialog.dismiss(); } } } class MyThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub int i = 0; int k = 0; while (i <= 100) { try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message message = handler.obtainMessage(); message.arg1 = i; message.arg2 = k + 10; if (i == 100) { message.what = 1; } handler.sendMessage(message); i++; k++; } } }}
0 0
- Android编程学习之Message处理Handler
- Android之Handler & Message
- Android开发详解之异步处理Handler,Message,Looper详解
- Android异步消息处理之Looper,Handler,Message,MessageQueue
- Android异步消息处理机制之Handler、Looper、Message
- Android 异步消息处理机制之Handler、Message、Looper
- android编程之在单线程模型中Message、Handler、Message Queue、Looper之间的关系
- Android消息处理Handler,Message,Looper
- android消息处理机制(Looper,Handler,Message)
- android 异步处理采用Thread + Handler + Message
- Android消息处理机制--Looper,Handler,Message
- Android消息处理机制Message,Looper,Handler
- Android消息处理机制:Handler|Message
- Android消息处理机制:Handler|Message
- Android 消息处理机制:Handler|Message
- Android消息处理机制Handler、Looper、Message
- Android消息处理Handler与Message
- Android学习之问题处理程序Handler
- oracle11g 控制文件丢失重建控制文件
- 拔河问题
- 关于back键隐藏当前activity和销毁Activity的两个监听方法
- 数据库的隔离级别
- hosts 文件位置 /private/etc
- Android编程学习之Message处理Handler
- hdoj 5671 Matrix (模拟+技巧)
- NBUT 1219 Time
- js小记
- CC2640 看门狗
- ztree的使用
- org.springframework.beans.factory.BeanCreationException:。。。FactoryBean which is currently in creatio
- 常见异常
- liunx下tar的使用