2014-04-24 53 views
2

我有一個IntentService連接到藍牙(阻塞部分),發送數據,並斷開連接。我修改了IntentService來處理停止服務的特殊意圖。但是,似乎由於阻止連接到藍牙設備的代碼(無限期地或直到被用戶取消,如預期的那樣),所以在代碼的阻止部分不再被阻塞之前,不會調用覆蓋onStart或onStartCommand。OnHandleIntent中的代碼是否阻止IntentService接收其他意圖?

onHandleIntent中的代碼是否可以阻止其他意圖到達服務?

回答

1

是的。 IntentService使用單個工作線程。

還是要引用文檔正是:

的所有請求都在一個工作線程處理 - 他們可能會採取只要有必要 (並不會阻止該應用程序的主循環), 但只一次請求將被處理。

https://developer.android.com/reference/android/app/IntentService.html

這意味着只有一個呼叫onStartCommand可以在一個時間IntentService發生。

+0

就我而言,應用程序只能在連接後發送數據。如果在onHandleIntent中有一個連接線程會被認爲是正常的做法,它會向Handler發送一條消息或一條不消息的消息?像這樣http://pastebin.com/9BuSPNv4 –

+1

不,如果你使用的是IntentService,你不應該在那裏開始自己的線程。或者說,它聽起來像你真正想使用的是一個普通的Service,並使用你想要的任何東西(AsyncTask,HandlerThread,Executor等等)在那裏啓動你自己的工作線程, – arnorhs

相關問題