android学习笔记之Handler

Handler handler = new Handler();

Runable update = new Runnable(){

publicvoid run(){

System.out.println(“update”);

handler.postDelayed(update,3000); //3秒后将update线程添加到队列中

}

}

handler.post(update); //将update线程添加到队列中,实际上是执行update中的run方法,而不是以start方式启动线程,所以是在同一个线程中执行,而不是新启动一个线程。
可以通过Thread.currentThread().getId();来判断是否同一个线程

handler.removeCallbacks(update); //

Handler handler = new Handler(){

publicvoid handleMessage(Message msg){

…..msg.arg1

…..msg.arg2

(string)msg.obj

}

}

Message msg = handler.obtainMessage();

msg.arg1 = 1;

msg.arg2 = 1;

msg.obj = “abc”

handler.sendMessage(msg); //将msg对象加入消息队列当中,handleMessage方法就会接收到

使用新线程来处理消息

//生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能

HandlerThread handlerThread = newHandlerThread(“handler_thread”);

//在使用HandlerThread的getLooper()方法之前,必须先调用该类的start(),否则getLooper()取出的为空

handlerThread.start();

MyHandler myHandler =newMyHandler(handlerThread.getLooper());

Message msg = nyHandler.obtainMessage();

msg.sendToTarget(); //将msg发送到目标对象,所谓的目标对象就是生成该msg对象的handler对象

class MyHandler extends Handler{

publicMyHandler(){ //在main线程中执行

}

publicMyHandler(Looper looper)

{

Super(looper); //指定MyHandler在looper这个线程中执行,而不是main线程执行

}

publicvoid handlerMessage(Message msg){

}

}

通过Message来发送大量数据时,应该使用setData(Bundle bundle)

Bundle b = new Bundle();

b.putInt(“age”,19);

b.putString(“name”, “Jhon”);

msg.setData(b);

msg.sendToTarget();

取数据时:

Bundle b = msg.getData();

int age = b.getInt(“age”);

String name = b.getString(“name”);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值