1. 程式人生 > >sendBroadcastAsUser 用來區分不同的使用者。

sendBroadcastAsUser 用來區分不同的使用者。

作為android 的四大基本元件之一的 BroadCast Receiver,是進行程序間通訊的重要手段,幾乎所有的應用都會註冊和傳送各種不同的intent, 那麼有一個問題,你是否瞭解Intent?  作為延伸,我們需要了解一下 sendBroadcast()  / sendOrderedBroadcast() sendStickyBroadcast() 這三個方法的不同。

1)sendBroadcast: 最普通的傳送intent的方式,是一種無序的廣播機制,理論上,所有的接受者同時獲得該intent的訊息, 接受者之間不存在先後順序, 不能截斷/修改intent的資料。 應用普遍使用的就是該方式。

2)sendOrderedBroadcast: 是有序的傳送廣播的機制,所有接受者都可以設定priority , 按照priority 的大小順序進行傳遞, 上一個優先順序的接受者,可以截斷和修改intent裡面的資料。 同時,也可以設定一個最後接收者(總是在最後一個接收到這個intent,用來做一些特定的功能)。

3)sendStickyBroadcast: 是一種粘性廣播。所謂的粘性是指,這個intent 沒有周期限制, 一般的intent 只能傳送給當前已經註冊了這個監聽的receiver,一旦傳送完畢就會失去作用週期,而粘性廣播沒有這個限制,即便後來註冊的intent也可以收到這個廣播。 需要注意的一點是 這種傳送方式不會導致ANR, 因為它沒有傳送時間的限制。

4)android 4.2 之後加入了多使用者,UserHandle.ALL  /  UserHandle.CURRENT  /  UserHandle.CURRENT_OR_SELF  /  UserHandle.OWNER

      這就造就了另外一個傳送函式 sendBroadcastAsUser 用來區分不同的使用者。