已采纳回答 / 攻城狮ZSP
老师讲的方法有点问题,消息开始发送以后,实际上形成了一个消息发送循环,去除原始的消息并不能停止这个循环,要停止这个队,在发送消息的前面加个开关,就行了。代码如下: if(flag){ mainHandler.sendMessageDelayed(message, 1000); } case R.id.stop:flag=false; break;
2016-11-05
已采纳回答 / 小罗希冀
我自己个人认为Callback其实就是在Looper(消息泵)和Handler中间加上一层过滤网,一些对于Handler没有意义或者不重要的信息直接交给Callback处理。打个比方,Looper就是大臣,Callback就是太监,Handler就是皇帝,大臣(Looper)在上报消息的时候先要把消息给太监(Callback)看一看,太监(Callback)看完以后觉得事关重大,就将消息上报给皇帝(Handler),如果太监(Callback)觉得这是根本就不重要,它就会自行处理或者拒绝接受这个信息。所以...
2016-09-24
已采纳回答 / _InnoVation
为了实现循环播放OnCerate方法中的handler.postDelayed(runnable,1000);实现了程序1s后调用runnable线程。在runnable线程中切换图片后又重新调用了handler.postDelayed(runnable,1000);方法。runnable线程每切换一次图片后继续调用它本身,这种循环调用实现了runnable每隔1s被就会执行一次,表面上看就是图片每隔1s切换一次。答得比较浅,欢迎拍砖~~
2016-09-09
已采纳回答 / lsjava
当前View的AttachInfo信息,这个信息是用来在窗口处理中用的。Android的窗口系统就是用过AttachInfo来判断View的所属窗口的,这个了解下就行。详细信息设计到Android框架层的一些东西。<...code...>
2016-07-07
已采纳回答 / Swy㏄
handlerThread是子线程的。平时在线程中实例化handler(首先的需要确定线程中包含looper)在线程中创建looper需要在线程的run()方法中先调用looper.prepare()来初始化looper,然后再run()方法后调用looper.loop()方法来死循环 这样就在当前线程中创建好了looper而handlerthread就是更加简单的用来创建线程中的looper
2016-05-22
已采纳回答 / 粗鲁的男人
每一个handler必须要对应一个looper,主线程会自动创建Looper对象,不需要我们手动创建,所以主线程可以直接创建handler。在new handler的时候没有传入指定的looper就会默认绑定当前创建handler的线程的looper,如果没有looper就报错。如果自己开个子线程,那肯定得自己创建looper对象啊,或者用HandlerThread,的getlooper也行。
2016-05-20