服務類別的用途是什麼?Android中的服務類別
許多藍牙低耗能的例子使用服務類來進行所有藍牙通信,連接,斷開連接,掃描設備等。活動類始終調用此服務類的方法。
那麼直接在Activity類中實現所有的藍牙通信呢?爲什麼沒有人像那樣實現並使用Service類呢?
服務類別的用途是什麼?Android中的服務類別
許多藍牙低耗能的例子使用服務類來進行所有藍牙通信,連接,斷開連接,掃描設備等。活動類始終調用此服務類的方法。
那麼直接在Activity類中實現所有的藍牙通信呢?爲什麼沒有人像那樣實現並使用Service類呢?
A服務是可以在後臺執行長時間運行的操作,並且不提供用戶界面的應用程序組件。另一個應用程序組件可以啓動一個服務,即使用戶切換到另一個應用程序,它也將繼續在後臺運行。此外,組件可以綁定到服務以與其交互,甚至執行進程間通信(IPC)。例如,服務可能會在後臺處理網絡事務,播放音樂,執行文件I/O或與內容提供商交互。
基本上它是一個從活動lifecylce鬆散耦合組件independet。問題出在Android上,你無法真正控制何時會創建/銷燬活動,例如,如果您正在加載活動並且接收到調用,則活動可能會被破壞,並且更新結果將會是丟失,甚至最糟糕的是你的加載任務不會完成並保持活動,並且它不能被垃圾收集,並且會造成內存泄漏。
因此,您使用服務進行長時間運行的後臺任務,但只要您必須讓它們運行,以避免再次發生內存泄漏並對您的資源感到滿意。
注意:當應用程序完成工作時停止其服務很重要,以避免浪費系統資源和消耗電池電量。如有必要,其他組件可以通過調用stopService()來停止服務。即使您啓用綁定服務,如果它曾收到對onStartCommand()的調用,則必須始終自行停止該服務。
服務類用於執行背景非UI操作,如播放音頻文件。另外的服務是即使您的活動被破壞也會在後臺運行的組件,而使用藍牙我們確實做了一些非UI手機級別的操作,因此我們使用服務。
怎麼樣直接在Activity類實現所有藍牙通信,而不是
你最有可能最終被框架殺害做太多的UI線程(又名ANR - 應用程序沒有響應) 。請參閱Keeping Your App Responsive開發者網站上的文章。
任何與UI沒有直接關係的東西(如任何類型的網絡)都應該卸載到獨立的任務中。無論是AsyncTask:
該類允許進行後臺操作和結果發佈在UI線程上 而無需操作線程和/或處理程序。
IntentService是對於處理需求異步 請求(表示爲意圖)服務的基類。
。所述Service(未IntentService)可以稍微不同的目的:
A服務是表示任一種 應用程序的慾望以執行更長的運行的操作,同時不 與用戶交互,或爲其他提供功能性的應用程序組件 應用程序使用。
活動課並不適合任何類型的溝通任務。只要用戶切換到其他活動,它就可以被殺死。它顯示UI,這意味着我們不能在Activity的線程中做很多工作。有時候,你可以使用類似的財產以後與
的AsyncTaskThread t = new Thread(new Runnable() {
@Override
public void run() {
// do something here
}
});
t.start();
或更復雜的東西,但是這是適合短的時間行動。
Service不會被殺死那麼快,所以它適合任何類型的背景工作。剛剛閱讀Android documentation about services。
您應該在Android中使用處理程序或Asynctask而不是線程本身 – for3st
如果您在主要活動線程中進行通信,那麼它會阻止將應用程序設置爲非響應狀態的UI。 – DevZer0
不要放「?」。這或者是問題「?」或陳述句「。」。從來沒有。 –
有興趣知道這些帶藍牙低能耗示例的情況,因爲Android尚未正確支持它。你真的指的是標準的藍牙? – Ifor