Android學習筆記17——Service(3)

創建一個Bound Service

      一個bound Service用於建立一個長連接並允許應用程序組 件通過調用bindService方法綁定,一般來說它不運行組件通過調用startService方法來啓動它。

      當我們想要我們應用程序的Activities和其他組件與這個Service交互,或者想要通過內部進程調用來使自己應用程序的一部分功能開放給其他應用程序的時候,我們可以創建一個Bound Service。

      爲了創建一個Bound Service,我們必須實現onBind()這個回調方法並且返回一個IBinder對象,這個對象定義了和這個Service交流的接口。這樣其他應用程序組件就能夠通過調用bindService方法來連接這個接口並且開始調用這個Service中的方法。這個Service就是爲了服務於這些綁定到它的組件的,因此當這些組件全部與這個Service解除綁定的時候,系統會自動銷燬這個Service,我們不需要自己去停止他們。

      而爲了創建一個Bound Service,我們首先應該做的事情是定義一個客戶端怎麼和這個Service交互的接口。在這個Service和客戶端之間的接口必須是一個IBinder的實現,並且必須從你的Service的這個onBind回調方法返回。一旦客戶端收到了這個IBinder,客戶端就會通過這個接口和這個Service進行交互。

      多個客戶端能夠一次綁定到這個Service。當一個客戶端和這個Service完成交互的時候,它能通過調用unbindService解除綁定,一旦沒有任何客戶端綁定到這個Service的時候,系統將會銷燬這個Service。

發送通知給用戶

      一旦Service運行以後,它能夠通過用Toast Notifications或着Status Bar Notifications來通知用戶事件。

     一個Toast Notification就是一條出現在當前窗體很短一段時間的消息,然後就會消失。而一個狀態欄通知就是一條在狀態欄中擁有圖標的消息體,用戶能夠通過他進行一些操作。

    通常,狀態欄通知是一個最好的技術,當一些後臺操作完成的時候,用戶能夠通過它進行一些操作。當用戶通過擴展的視圖來選擇某個通知的時候,這個通知能夠開啓一個Activity。

在前臺運行一個Service

     一個前臺的Service通常是一個用戶積極去做的事情並且當系統內存較低的時候不能被殺死。一個前臺的Service必須在狀態欄提供一個通知,這個通知不會消失直到這個Service停止或者從前臺移除掉。

     例如,一個播放音樂的Service應該被設置爲前臺的Service,因爲這樣用戶能夠很清楚的知道它的操作,在狀態欄中的通知可能會推測出當前播放的音樂並且允許用戶通過一個Activity來和這個播放器進行交互。

     我們可以通過調用startForeground方法來開啓一個前臺的Service。這個方法需要兩個參數:一個整數用來標識出這個通知,和通知欄的這個Notification。

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
        System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
        getText(R.string.notification_message), pendingIntent);
startForeground(ONGOING_NOTIFICATION_ID, notification);
注意:這個ID不能是0.

        爲了在前臺中移除這個Service,我們可以調傭stopForeground方法。這個方法需要一個boolean參數,用來標識是否移除這個狀態欄的通知,這個方法不會停止這個Service。然而,如果當一個前臺Service正在運行的時候,你停止了這個Service,那麼這個通知也就會被移除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章