2012-08-15 65 views
1

我分析了Android教程,該教程表示開始接收長時間運行操作> 10秒的服務,但不是服務從主線程運行?正在爲廣播接收器啓動ANR的服務修復程序

http://developer.android.com/guide/practices/responsiveness.html#avoiding

服務(http://developer.android.com/reference/android/app/Service.html)

也說沒有做長時間操作..哪一個更那麼適當?請幫助我們。 謝謝。

+1

服務沒有Ui線程。 ANR僅適用於UI線程。因此,在服務中執行長操作是安全的 – nandeesh 2012-08-15 18:51:52

+1

@nandeesh:服務大多數情況下在主應用程序線程上運行。 'onCreate()','onStartCommand()','onBind()'和'onDestroy()'在應用程序的活動使用的同一個「UI線程」上調用。 「因此,在服務中進行長時間操作是安全的」 - 只有當它是一個「IntentService」,或者如果你分叉你自己的線程。 – CommonsWare 2012-08-15 21:07:23

+0

@CommonsWare我沒有想過這種方式。你是對的。謝謝!! – nandeesh 2012-08-15 22:10:33

回答

1

但是不是從主線程運行的服務?

在主應用程序線程上調用Service(例如,onStartCommand())的生命週期方法。然而,與清單登記的BroadcastReceiver不同,Service可安全地分叉後臺線程。 IntentService會自動執行此操作,這就是爲什麼它適用於在許多情況下與清單註冊的BroadcastReceiver配對。

+0

使用服務或Intentservice更好嗎? – 2012-08-15 23:50:07

+1

@RandonP:這取決於你在做什麼。如果你試圖做的或多或少是「事務性的」(例如,寫一些東西到磁盤上,從互聯網上下載東西),一個「IntentService」就能很好地工作。如果OTOH試圖做一些會運行很長一段時間的事情(例如,聊天客戶端與一個管理正在監聽傳入聊天消息的套接字的線程的服務),一個帶有你自己的常規「服務」後臺線程可能是一個更好的主意。 – CommonsWare 2012-08-15 23:51:39