編輯:關於Android編程
本文實例講述了Android編程實現開始及停止service的方法。分享給大家供大家參考,具體如下:
開始一個Service
你可以從一個activity或從其它應用的組件通過傳遞一個Intent(指定了要啟動的服務)給startService()啟動一個服務.Android系統然後調用service的onStartCommand()方法並且把Intent傳遞給它.(你永遠不能直接調用onStartCommand().)
例如,一個activity可以在調用startService()時使用一個明確的intent開始前文的例子中的service(HelloSevice):
Intentintent = new Intent(this, HelloService.class); startService(intent);
startService()方法會立即返回然後Android系統調用service的onStartCommand()方法.但是如果service尚沒有運行,系統會先調用onCreate(),然後調用onStartCommand().
如果service沒有提供綁定功能,傳給startService()的intent是應用組件與service之間唯一的通訊方式.然而,如果你希望service回發一個結果,那麼啟動這個service的客戶端可以創建一個用於廣播(使用getBroadcast())的PendingIntent然後放在intent中傳給service,service然後就可以使用廣播來回送結果.
不同的啟動請求導致對service的onStartCommand()的不同調用,但停止service的請求只有一個(使用stopSelf()或stopService()).
停止一個service
一個"啟動的"service必須管理其自己的生命期.這表示,系統不會停止或銷毀這種service,除非內存不夠用了並且service在onStartCommand()返回後會繼續運行.所以,service必須調用stopSelf()停止自己或由另一個組件調用stopService()來停止它.
一旦通過stopSelf()或stopService()發出了停止請求,系統就會盡可能快地銷毀service.
然而,如果你的service同時處理多個對onStartCommand()的請求,那麼你不應在處理完一個請求之後就停止service,因為你可能已經又收到了新的啟動請求(在第個完成後停止將會結束掉第二個).要避免這個問題,你可以使用stopSelf(int)來保證你的停止請求對應於你最近的開始請求.也就是,當你調用stopSelf(int)時,你傳遞開始請求的ID(傳遞給onStartCommand()的startId)給service,如果service在你調用stopSelf(int)之前收到一了個新的開始請求,發現ID不同,於是service將不會停止.
注意:你的應用在完成工作後停止它所有的service是非常重要的.這可以避免浪費系統資源和消耗電量.如果需要,其它的組件可以調用stopService()停止service.即使你為service啟用了綁定,你也必須自己停止service,甚至它收到了對onStartCommand()的調用也這樣.
創建一個綁定的Service
一個綁定的service是允許應用的組件通過調用bindService()來綁定它以創建一個能長期存在的連接(並且一般不允許組件調用startService()來啟動它).
當你的activity或其它組件想與service交互或你的應用想基於IPC的向其它應用提供功能時,你應該創建一個綁定的service.
要創建一個綁定的service,你必須實現回調方法onBind(),還要在其中返回一個IBinder,這個IBinder定義了與service通訊的接口.其它應用組件就可以在之後調用bindService()來接收這個接口並開始調用service的方法.service只在有應用組件綁定到它時才活著,所以當沒有組件綁定到它時,系統就會宰了它(你不需去停止一個綁定的service,跟用onStartCommand()啟動的service不一樣).
要創建一個綁定的service,首先要做的就是定義客戶端如何與service通訊的接口.這個接口必須是IBinder的一個實現,並且必須被回調方法onBind()返回.一旦客戶端接收到IBinder,它就可以開始與service進行交互.
多個客戶端可以一起綁定到一個service.當一個客戶端完成與service的交互,它調用unbindService()來解除綁定.一旦不再有任何客戶端綁定到service,系統就宰了這個service.
有很多方法來實現一個綁定的service並且這些實現要比"開始的"service難懂得多.
發送通知給用戶
一旦開始運行,一個service可以通過Toast通知或狀態欄通來通知用戶一些事件.
一個toast通知是一個出現在當前窗口表面上並過一會就消失的消息.當一個狀態欄通知提供一個帶有消息的圖標到狀態欄,用就可以先定它來執行一些動作(比如啟動一個activity).
通常,一個狀態欄通知是當一些後台工作(比如一個文件下載完成了)完成後通知用戶可以對它進行動作的最佳方式.當用戶選擇這個通知時,它可以開始一個activity(比如可以查看下載的文件).
更多關於Android組件相關內容感興趣的讀者可查看本站專題:《Android基本組件用法總結》
希望本文所述對大家Android程序設計有所幫助。
最近項目用到了藍牙連接,搜索設備的內容,其中需要搜索過程中出現波紋的動畫效果,在這裡將項目中OC語言編寫的這種動畫效果,轉換成Swift編寫,下面簡單介紹說明一下代碼。這
今天來給大家介紹一個非常有用的Studio Tips,有些時候我們在一個方法內部寫了過多的代碼,然後想要把一些代碼提取出來再放在一個單獨的方法裡,通常我們的做法是復制粘貼
概述:單線程下載很簡單,就是開啟一個線程去下載資源再進行本地保存;多線程下載是通過RandomAccessFile(隨機文件讀寫操作類)來設置每個線程讀取文件的起始點位置
相信一些有關注魅族的用戶都知道魅族即將要發布一款新機為魅族mx6,那麼魅族mx6這款新機怎麼樣?魅族mx6跑分多少呢?下文帶來魅族mx6性能跑分評測,一起和