首页 技术 正文
技术 2022年11月7日
0 收藏 745 点赞 790 浏览 4420 个字
  • 案例一 Message创建三种方法:
package com.example.day19_handler_demo1;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;public class MainActivity extends Activity { private TextView tv; private int count =0; private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) { Log.e("AAA", "=handleMessage=>"+Thread.currentThread().getName());
//处理消息
//获取消息
int num = msg.arg1;
//更新数据
tv.setText(num+""); };
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv);// android.view.ViewRootImpl$CalledFromWrongThreadException:
// Only the original thread that created a view hierarchy
// can touch its views. new Thread(){
public void run() {
while(true){ if(count<100){
count++;
}
Log.e("AAA", "=Thread=>"+Thread.currentThread().getName());
// tv.setText(count+"");
//方式一获取Message对象 不建议使用
//Message msg = new Message(); 如果用sendToTarget想要setTarget
//方式二获取Message对象
//Message msg = Message.obtain(); 方便后面用sendToTarget
//方式三获取Message对象
Message msg = handler.obtainMessage();
//msg携带数据
msg.arg1 = count;
//使用Handler发送数据
handler.sendMessage(msg); try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}}

  • 案例二 Message几个信息载体:
package com.qf.day19_handler_demo2;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;public class MainActivity extends Activity { private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
//接收和处理消息的
switch (msg.what) {//根据标记进行处理数据
case 1:
int a = msg.arg1;
int a2 = msg.arg2;
String str = (String) msg.obj;
int flag = msg.what; Log.e("AAA", "==a=="+a);
Log.e("AAA", "==a2=="+a2);
Log.e("AAA", "==str=="+str);
Log.e("AAA", "==flag=="+flag); break;
case 2:
Log.e("AAAA", "AAAAAAAAAAAAAAAA"); break; default:
break;
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} //子线程里的数据发送到主线程
public void OnMyClick(View v){ new Thread(){
public void run() { //获取消息的载体对象
Message msg = Message.obtain();
msg.arg1 = 100;
msg.arg2 = 200;//arg1,arg2:都是int类型数据
msg.obj = "我是大数据"; //Object对象 string Bitmap List<T>
msg.what = 1;//int 类型 标记 handler.sendMessage(msg); };
}.start(); }}

  • 案例三 几个发送msg的方式:
package com.qf.day19_handler_demo4;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.util.Log;
import android.view.View;
import android.widget.ImageView;public class MainActivity extends Activity { private ImageView ivShow; Handler handler = new Handler(); Handler handler2 = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
pDialog.show();
break;
case 2: Bitmap bitmap = (Bitmap) msg.obj;
ivShow.setImageBitmap(bitmap); pDialog.dismiss(); break; default:
break;
} };
}; private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ivShow = (ImageView) findViewById(R.id.iv_show); pDialog = new ProgressDialog(MainActivity.this);
pDialog.setTitle("下载图片");
pDialog.setIcon(R.drawable.ic_launcher);
pDialog.setMessage("正在下载中,请稍后...");
} public void MyLoadClick(View v) {
//pDialog.show();
//开启子线程下载图片
new Thread(){
public void run() {
//在子线程展示 //发送null消息 只设置一个标记
handler2.sendEmptyMessage(1); byte[] data = HttpUtil.getHttpResult("https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2507878052,3446525205&fm=58");
final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); //第一种方式 将代码块发送到主线程 在内部直接一个匿名内部类runnable 可以直接更新UI(主线程)
// handler.post(new Runnable() {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
// Log.e("AAA", "=handler=>"+Thread.currentThread().getName());
//
// //更新Ui
// ivShow.setImageBitmap(bitmap);
// pDialog.dismiss();
// }
// }); //延迟发送 在内部直接一个匿名内部类runnable 可以直接更新UI(主线程)
// handler.postDelayed(r, delayMillis) //第二种方式 使用msg 携带数据到主线程
// Message msg = Message.obtain();
// msg.obj = bitmap;
// msg.what = 2;
// handler2.sendMessage(msg);// 延迟发送一个msg
//handler2.sendMessageDelayed(msg, delayMillis) //第三种 sendToTarget 发送到那个Handler
// Message msg = handler2.obtainMessage();
// msg.obj = bitmap;
// msg.what = 2;
// msg.sendToTarget();//发送给那个Handler //第四种方式
Message msg = Message.obtain();
msg.obj = bitmap;
msg.what = 2;
msg.setTarget(handler2);//指明是那个Handler
msg.sendToTarget();//发送给那个Handler };
}.start(); }}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,956
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,480
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,327
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,110
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,741
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,776