【问题标题】:Looper.loop not called but code in handler is still executedLooper.loop 未调用,但处理程序中的代码仍在执行
【发布时间】:2013-07-14 21:26:33
【问题描述】:

我试图了解 looper.loop 的工作原理,以及何时在我的代码中使用它。 我有一个可运行的绑定服务。在里面我有一个处理程序,用于保存更新 Ui 的代码。这是代码。

private Runnable builder = new Runnable() {
public void run() 
{
  while(isThreadStarted == true)
  {
    if (newgps == 1)
     {  
         Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
                       public void run() { 
                         //some code that updates UI
                       }
                 }
           }
      }
  }
  looper.prepair
} 
  1. 从我读到的looper。 prepare 必须在处理程序生成之前调用。但我注意到我没有这样做,但这段代码仍然有效。这怎么可能?
  2. 我想解决这个问题,但我不确定将 loper.loop 放在哪里。因为这个处理程序被多次调用。如果我将 looper.loop 放在 .prepare 之后可以吗?然后.quit when isThreadStarted == false?

【问题讨论】:

    标签: java android looper


    【解决方案1】:

    Handler 与 UI 线程相关联,因为您将其附加到 Looper.getMainLooper()。 UI 线程在应用程序启动时准备其Looper,因此应用程序本身无需执行任何操作。

    【讨论】:

      【解决方案2】:

      通过使用Looper.getMainLooper(),您将获得主线程的Handler,并且您正在主线程上发帖。主线程在创建时系统已经准备好了它的looper。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 1970-01-01
        • 2018-03-26
        • 2016-05-12
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多