2016-09-24 81 views
0

我應該使用什麼使一個應用程序,它會:服務VS螺紋

  1. 詢問用戶名和密碼
  2. 授權
  3. 運行的無限循環中,它會獲取一些數據從網站每隔10秒左右。

我希望能夠在此期間完成一些基本任務,或鎖定我的屏幕而不會導致線程死亡。我不希望服務在關閉應用程序後繼續運行,我只是想確保線程在運行很長時間後永遠不會被殺死。

我也想問:服務和線程交互是否容易?我可以通過一個CancellationToken並取消它,當用戶按下停止按鈕?

我還發現setThreadPriority,它會幫助我的情況嗎?

回答

2

服務和線程是完全不同的概念。線程是一個並行執行的獨立進程。服務是應用程序的一個組件,它沒有UI並且運行在一個單獨的生命週期中。服務不在其自己的線程上運行,它在UI線程上運行(儘管它可以在需要時啓動線程)。

如果您想執行一些任務但不綁定到Android Activity生命週期,則使用服務。如果要並行運行,則使用線程。如果你想要兩個,那麼你使用一個啓動線程的服務。

從我正在閱讀的內容(您不希望線程在活動完成後繼續)中,您需要線程而不是服務。

+0

如果我不做任何資源昂貴,線程將無限運行嗎? – sooqua

+0

一個線程運行,直到線程的函數返回或應用程序退出。請注意 - 應用程序退出,而不是活動。只要完成Activity就不會殺死線程,當你的Activity被銷燬時你需要取消它,以便它可以退出。 –

+0

> _線程運行,直到線程的函數返回或應用程序退出._這是真的,但[本文](https://developer.android.com/guide/components/processes-and-threads.html)指出:持有當前對用戶不可見的活動的進程不會直接影響用戶體驗,並且系統可以隨時取消它們以回收前景,可見或服務進程的內存。 – sooqua

0

服務可以獨立運行(而您的應用程序不一定在運行)。線程可以從應用程序本身或服務中分離出來。

+0

但我想要「隔離」的對立面。我想和線程交互一樣。關閉我的應用後,它不需要繼續運行。我只是需要這份工作,無論如何運行,我正試圖找到最好的方法來做到這一點 – sooqua

+1

你可能想看看[Bound Services](https://developer.android.com/guide/components/bound- services.html)。這些作爲您的活動可以與之互動的服務。也許這會有所幫助 – GPRyan