-
handler = new handler(Looper loop):创建handler对象的时候可以指定传进来的loop,那么这个loop可以我们指定,那么他默认情况下就会用我们指定的loop往循环队列里面查询插入消息。查看全部
-
如果你在主线程中创建一个handler,并重写他的handlerMessage方法,在这个handlermessage方法中不要做过多的耗时操作,否则会导致UI界面出现一种卡死状态。查看全部
-
为什么点击stop不能停止呢? Message message = new Message(); 实例化Message时,如果没有设置Message的what值,将默认是0; 发送的代码: case R.id.btn_send: handler.sendEmptyMessage(1); break; 除了第一次向主线发送的message的what值是1,循环中message的what值都是0; 将点击停止事件改为 case R.id.btn_stop: handler.removeMessages(0); threadHandler.removeMessages(0); 就可以停止了查看全部
-
可以在HandlerThread中下载网络图片或者更新数据库中的信息。这种情况下我们可以在不占用主线程的情况下更新我们一些比较耗时的操作。查看全部
-
new HandlerThread("handler thread")创建HandlerThread的同时起名为handler thread查看全部
-
HandlerThread避免多个线程运行时报空指针异常查看全部
-
handler消息机制的处理过程查看全部
-
Handler的原理是什么? 一:Handler封装了消息的发送(主要包括消息发送给谁) Looper 1.内部包含一个消息队列也就是MessageQueue,所有的Handler发送的消息都走向这个消息队列 2.Looper.Looper方法,就是一个死循环,不断的从MessageQueue取消息,如有消息就处理消息,没有消息就阻塞 二:MessageQueue,就是一个消息队列,可以添加消息并处理消息。 三:Handler也很简单,nebula会跟Looper进行关联,也就是说在Handler的内部可以找到Looper,找到了Looper也就找到了MessageQueue,在Handler中发送消息,其实就是向MessageQueue队列中发送消息 总结:handler负责发送消息,Looper负责接收Handler发送的消息,并直接把消息回传给Handler自己,MessageQueue就是一个存储消息的容器查看全部
-
android为什么要设计只能通过Handler机制更新UI呢? 答:最根本的目的就是解决多线程并发的问题。 假设如果在一个Activity当中,有多个线程更新UI,并且都没有加锁机制,那么会产生什么样子的问题? 答:更新界面错乱。 如果对更新UI的操作都进行加锁处理的话又会产生什么样子的问题? 答:性能下降。 处于对以上目的的问题的考虑,android给我们提供了一套更新UI的机制,我们只需遵循这样的机制就可以了。根本不用去关心多线程的问题,所以更新UI的操作,都是在主线程的消息队列当中去轮询处理的。查看全部
-
在handler.post(new Runnable(){ })中更新UI查看全部
-
handler.removeCallbacks(runnable):将消息整个handler中移除查看全部
-
message.sendToTarget():实际上还是调用了Message的sendMessage方法。查看全部
-
textView.setText(""+msg.obj)的msg.obj怎么知道调用Person的toString方法呢? xxx+"" 和 xxx.toString() 是一样的;msg.obj=message.obj=person,当然调用person的toString方法查看全部
-
handlerMessage方法是用来接收到我们发送过来的消息。查看全部
-
postDelayed会延迟1秒首次显示图片查看全部
举报
0/150
提交
取消