android 定时器 Timer 使用 及其遇到的问题

本人安卓初学者,错误请指正


timer = new Timer();
timer.scheduleAtFixedRate(<span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px; color: rgb(0, 0, 255);">new</span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;"> TimerTask(){  <br style="margin: 0px; padding: 0px;" /></span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px; color: rgb(0, 128, 128);">2</span><span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);"> </span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;">      </span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px; color: rgb(0, 0, 255);">public</span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;"> </span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px; color: rgb(0, 0, 255);">void</span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;"> run() {  </span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;">  </span>
<span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;"><span style="white-space:pre">		</span>... ...  <br style="margin: 0px; padding: 0px;" /></span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px; color: rgb(0, 128, 128);">6</span><span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);"> </span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;">   <span style="white-space:pre">	</span>}  <br style="margin: 0px; padding: 0px;" /></span>
</pre><pre name="code" class="java">
<span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px; color: rgb(0, 128, 128);">7</span><span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);">   </span><span style="margin: 0px; padding: 0px; font-family: 'Courier New'; line-height: 18px;">}</span>, 0, 500);   

当我想使用定时器里在 run() 方法里面操作 ui 时发生错误,才想起来 ui 是线程非安全的
应该改为在 run() 方法里面使用  <span style="font-family: Arial, Helvetica, sans-serif;">handler.post(),或者 <span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);"> handler.sendMessage(message) </span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);"></span></span><pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;">handler.post() 会调用 </span><span style="font-family: Arial, Helvetica, sans-serif;">getPostMessage()  把 </span><span style="font-family: Arial, Helvetica, sans-serif;">Runnable 对象封装到 message 里边  </span>

 
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);"></span></span><pre name="code" class="java">    private static Message getPostMessage(Runnable r) {
        Message m = Message.obtain();
        m.callback = r;
        return m;
    }
这时 msg.callback != null 所以调用 msg.callback 的 run()方法。
 
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: 'Courier New'; line-height: 18px; background-color: rgb(245, 245, 245);">这个是在主线程中执行的。。

</span></span>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值