没有调用Looper.loop但仍然执行处理程序中的代码

时间:2013-04-03 21:05:17

标签: java android looper

我想了解looper.loop是如何工作的,以及何时在我的代码中使用它。 我有一个具有runnable的绑定服务。我有一个处理程序,用于保存更新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。因为这个处理程序被多次调用。如果我在.prepare之后立即放置looper.loop会没关系吗?那么.treadEartStarted == false?
  3. .quit

2 个答案:

答案 0 :(得分:0)

Handler与UI线程相关联,因为您将其附加到Looper.getMainLooper()。 UI线程在应用程序启动时准备其Looper,因此应用程序不必自行完成任务。

答案 1 :(得分:0)

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