簡體   English   中英

服務或線程或AsyncTask

[英]Service or Thread or AsyncTask

請原諒我的問題,因為我對編程仍然很陌生,所以我不完全理解mainthreads,異步任務,服務和線程的概念。 我正在閱讀有關Android服務的文檔,因為我想從主線程執行一些任務。 它說:

如果您需要在主線程之外執行工作,但只有在用戶與您的應用程序交互時,您應該創建一個新線程而不是服務。

1.他們說你離開應用程序后立即停止“線程”(即:主頁按鈕)?

例如,如果您想播放一些音樂,但只有在您的活動正在運行時,您可以在onCreate()中創建一個線程,在onStart()中開始運行它,然后在onStop()中停止它。 還要考慮使用AsyncTask或HandlerThread,而不是傳統的Thread類。 有關線程的更多信息,請參閱進程和線程文檔。

2.如果線程被烘焙到Java中,為什么android有AsyncTasks?

請記住,如果您確實使用了服務,它默認仍然在應用程序的主線程中運行,因此如果它執行密集或阻塞操作,您仍應在服務中創建新線程。

這基本上意味着,幾乎每個服務基本上都會在其中創建一個線程嗎?

4.在服務中啟動AsyncTask是不是很糟糕?

1.他們說你離開應用程序后立即停止“線程”(即:主頁按鈕)?

當破壞啟動它的Thread時,應該銷毀一個Thread 因此,如果您在Activity啟動一個Thread ,那么當該Activity被銷毀或轉移到Service時,它應該被銷毀。 例如,你可以在開始的音樂Thread和更新的歌曲有,但如果你想繼續玩時, Activity被破壞,那么它應該被移動到一個Service

2.如果線程被烘焙到Java中,為什么android有AsyncTasks?

AsyncTask允許您執行后台工作,並在后台工作完成之前,期間和之后通過利用除doInBackground()之外的任何內置方法輕松更新UI ,因為它是唯一運行的方法UI Thread

這基本上意味着,幾乎每個服務基本上都會在其中創建一個線程嗎?

不一定,但你可以在里面創建一個Thread

4.在服務中啟動AsyncTask是不是很糟糕?

不,你可以這樣做。

AsyncTask是一種很好的后台工作方式。 它的方法使得更新UI變得非常容易。 但是您需要仔細閱讀文檔(可能甚至幾次)以確保您完全了解如何使用它們。 此外,請記住這些是短期操作,因此它們可以很好地下載網絡數據,但不應該用於持續時間超過幾秒的事情(根據文檔)

  1. 離開應用程序時,線程不會立即停止。 建議使用單獨的線程只是為了不阻止應用程序的GUI。

  2. AsyncTasks實際上在幕后使用ThreadPool,因為創建線程是一個昂貴的過程。 如果您有許多短暫的任務,使用AsyncTask只是一種快速,簡單但有效的方式來執行它們而不會阻止您的應用程序的GUI。

  3. 是的,基本上。 雖然服務比線程更重。 使用服務代替線程不是一個好主意。 實際上,服務也可以在整個其他進程上執行。 僅供參考。

  4. 不,如果您有許多短期任務要執行,那將是一個好主意。

如果您只是嘗試從主線程執行任務,則不需要服務。 只需創建另一個線程。

幕后的AsyncTask只是將您的任務提交給線程池執行。 如果您有許多短期任務,例如解析網絡流量, AsyncTask非常棒。

但是,如果要處理大量請求,則可能需要對執行任務的線程池進行更多控制。

  1. 沒有

  2. 因為主線程控制UI,而asynctasks可以在保持UI無滯后的同時做出更重的任務。

  3. 不,但是如果你想讓你的服務像從互聯網上加載東西一樣繁重,那么就應該使用asynctask。 大多數服務用於從互聯網加載數據,因此大多數服務都具有asynctasks。 請注意,要使活動在活動消失后保持活動,您必須指定它。 除非正確配置,否則默認情況下服務會與活動一起消失

  4. 沒有

你可能會因為線程,任務和進程而感到困惑。任務是一種很小的過程。進程是一個程序,它在你的系統示例中運行時啟動你的任務管理器它顯示所有進程像Internet-explorer一樣運行但是線程是一個小的輕量級進程意味着你可以說執行中執行某些任務的子進程但是android中的異步類似於線程但它可能很長。在android中你舉一個例子在android-phone中運行temple-run,而且有一個人正在打電話給你,以便執行高優先級任務並暫停當前線程,並且有很多方法就像onCreate(),onPause(),你可以理解它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM