『ANDROID』Handler

注意点:

1. http://blog.youkuaiyun.com/stonecao/article/details/6417364

在开发的过程中碰到一个棘手的问题,调用Activity.finish函数Acitivity没有执行生命周期的ondestory函数,后面查找半天是因为有一个handler成员,因为它有一个delay消息没有处理,调用Activity.finish,Activity不会马上destory,所以记得在Ativity finish前清理一下handle中的未处理的消息,这样Activity才会顺利的destory

2. 『线程队列』『消息队列』

handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程)。
它有两个作用: (1)、安排消息或Runnable在某个主线程中某个地方执行;(2)安排一个动作在不同的线程中执行。


原文地址:http://chengbs.iteye.com/blog/1152863

Handler为Android提供了一种异步消息处理机制,当向消息队列中发送消息(sendMessage)后就立即返回,而从消息队列中读取消息时会阻塞,其中从消息队列中读取消息时会执行Handler中的handleMessage方法,因此在创建Handler对象时,应使用匿名内部类重写该方法,在该方法中写上读取到消息后的操作,使用Handler的obtainMessage()方法来获得消息对象。


Handler与线程的关系:

 

使用Handler对象中的post方法可以将Runnable对象添加到Handler的线程队列中,该Runnanble的执行其实并未单独开启线程,而是仍然在当前Activity线程中执行的。Handler对象中是调用了Runnanble对象的run方法。

 

如何让Handler执行Runnanble时打开新的线程?????

1.       首先生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供。HandlerThread XXX=new HandlerThread(“handler_thread”)

2.       在使用HandlerThreadgetLooper()方法之前,必须先调用该类的start()方法。

3.       根据这个HandlerThread对象得到其中的Looper对象。

4.       创建自定义的继承于Hanlder类的子类,其中实现一个参数为Looper对象的构造函数方法,方法内容调用父类的构造函数即可。

5.       使用第三步得到的Looper对象创建自定义的Handler子类的对象,再将消息发送到该Handler的消息队列中,Handler复写的handleMessage()将会执行来处理消息队列中的消息,即Message对象,可以使用arg1arg2Object传递一些整型或对象,还可用Message对象的setData()来将Bundle对象传递给新创建的线程,新创建的线程在执行handleMessage()时可从message中利用getData()提取出Bundle对象来进行处理。

 

Java示例代码:

//自定义继承于Hanlder的子类,

    class MyHandler extends Handler

    {

    //实现一个参数 Looper对象的构造函数的方法,内容只需调用父类的构造函数即可。

    public MyHandler(Looper looper)

    {

         super(looper);

    }

       /* (non-Javadoc)

        * 复写handleMessage方法来处理消息,即Message对象;

        */

       @Override

       public void handleMessage(Message msg) {

           // TODO Auto-generated method stub        

           Bundle bundle=msg.getData(); 

           System.out.println("username:"+bundle.getString("name")+" password:"+bundle.getString("password"));

           System.out.println("Handler---------->"+

Thread.currentThread().getId());

           super.handleMessage(msg);

       }

    }

   

    public void beginSendMessageClick(View view) {

 

    //生成一个HandlerThread对象;

     HandlerThread handlerThread=new HandlerThread("handler_thread"); 

     //调用getLooper方法前必须调用此方法;

     handlerThread.start();

     //得到Looper对象;

     Looper looper=handlerThread.getLooper();

     //创建自定义的Handler子类的对象

     MyHandler myHandler=new MyHandler(looper);

     

//直接从Handler对象中获取message;另外 一种写法是直接调用Handler对象中的sendMessage方法,

     Message msg=myHandler.obtainMessage();

      Bundle bundle=new Bundle();

      bundle.putString("name""administrator");

      bundle.putString("password""admin_password");

      msg.setData(bundle);

     //Message发送到目标对象,该对象是生成msg对象的Handler对象-->myHandler

      msg.sendToTarget();

    }

 

 

/*小结:

 * 1.向哪个Handler发送消息,就必须在哪个Handler里接收。

 * 2.直接使用JavaThread是无法更新Android UI的,因为Android View在设计时,线程是不完全的,

 *   3. 直接使用Handler中的post方法是在当前主线程中做操作,而不是新建线程,建议使用Thread线程新建或用HandlerThread类亦可以;

 */




在充满仪式感的生活里,一款能传递心意的小工具总能带来意外惊喜。这款基于Java开发的满屏飘字弹幕工具,正是为热爱生活、乐于分享的你而来——它以简洁优雅的视觉效果,将治愈系文字化作灵动弹幕,在屏幕上缓缓流淌,既可以作为送给心仪之人的浪漫彩蛋,也能成为日常自娱自乐、舒缓心情的小确幸。 作为程序员献给crush的心意之作,工具的设计藏满了细节巧思。开发者基于Swing框架构建图形界面,实现了无边框全屏显示效果,搭配毛玻璃质感的弹幕窗口与圆润边角设计,让文字呈现既柔和又不突兀。弹幕内容精选了30条治愈系文案,从“秋天的风很温柔”到“你值得所有温柔”,涵盖生活感悟、自我关怀、浪漫告白等多个维度,每一条都能传递温暖力量;同时支持自定义修改文案库,你可以替换成专属情话、纪念文字或趣味梗,让弹幕更具个性化。 在视觉体验上,工具采用柔和色调生成算法,每一条弹幕都拥有独特的清新配色,搭配半透明渐变效果与平滑的移动动画,既不会遮挡屏幕内容,又能营造出灵动治愈的氛围。开发者还优化了弹幕的生成逻辑,支持自定义窗口大小、移动速度、生成间隔等参数,最多可同时显示60条弹幕,且不会造成电脑卡顿;按下任意按键即可快速关闭程序,操作便捷无负担。 对于Java学习者而言,这款工具更是一份优质的实战参考。源码完整展示了Swing图形界面开发、定时器调度、动画绘制、颜色算法等核心技术,注释清晰、结构简洁,哪怕是初学者也能轻松理解。开发者在AI辅助的基础上,反复调试优化细节,解决了透明度控制、弹幕碰撞、资源占用等多个问题,这份“踩坑实录”也为同类项目开发提供了宝贵经验。 无论是想给喜欢的人制造浪漫惊喜,用满屏文字传递心意;还是想在工作间隙用治愈文案舒缓压力,或是作为Java学习的实战案例参考,这款满屏飘字弹幕工具都能满足你的需求。它没有复杂的操作流程,无需额外配置环境,下载即可运行,用最纯粹的设计传递最真挚的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值