2012-03-27 84 views
1

我刚刚发现下面就Android官方网站代码:扩展IntentService类

@Override 
    protected void onHandleIntent(Intent intent) { 
     // Normally we would do some work here, like download a file. 
     // For our sample, we just sleep for 5 seconds. 
     long endTime = System.currentTimeMillis() + 5*1000; 
     while (System.currentTimeMillis() < endTime) { 
      synchronized (this) { 
       try { 
        wait(endTime - System.currentTimeMillis()); 
       } catch (Exception e) { 
       } 
      } 
     } 
    } 

同时我也阅读了以下论断:

  • 创建一个默认的工作线程执行交付给所有意图onStartCommand()与应用程序的主线程分开。
  • 创建一次将一个意图传递给onHandleIntent()实现的工作队列,因此您不必担心多线程。

因此,如果IntentService使用工作线程,我从来不必担心多线程,那么为什么我需要在onHandleIntent(...)方法中使用同步块?谢谢。

回答

1

因此,如果IntentService使用工作线程,我从来不必担心多线程,那么为什么我需要在onHandleIntent(...)方法中使用同步块?

IntentService工作线程。在该线程上调用onHandleIntent()

然而,生命周期方法(onCreate()onStartCommand()onBind()onDestroy()等)被称为主应用程序线程上。

如果在工作线程和主应用程序线程中都会使用对象,则需要通过某种方式同步其访问权限。

顺便说一句,你引用的代码示例是奇怪的,我不知道为什么谷歌正在使用它。如果您需要睡觉(在生产应用程序中不常见),请使用SystemClock.sleep()

+0

非常感谢。 – user1166635 2012-03-27 16:18:11