<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                #### 5.1.3 PendingIntent概述 在5.1.2節中,我們多次提到PendingIntent,那么PendingIntent到底是什么東西呢?它和Intent的區別是什么呢?在本節中將介紹PendingIntent的使用方法。 顧名思義,PendingIntent表示一種處于pending狀態的意圖,而pending狀態表示的是一種待定、等待、即將發生的意思,就是說接下來有一個Intent(即意圖)將在某個待定的時刻發生。可以看出PendingIntent和Intent的區別在于,PendingIntent是在將來的某個不確定的時刻發生,而Intent是立刻發生。PendingIntent典型的使用場景是給RemoteViews添加單擊事件,因為RemoteViews運行在遠程進程中,因此RemoteViews不同于普通的View,所以無法直接向View那樣通過setOnClickListener方法來設置單擊事件。要想給RemoteViews設置單擊事件,就必須使用PendingIntent, PendingIntent通過send和cancel方法來發送和取消特定的待定Intent。 PendingIntent支持三種待定意圖:啟動Activity、啟動Service和發送廣播,對應著它的三個接口方法,如表5-1所示。 表5-1 PendingIntent的主要方法 ![](https://img.kancloud.cn/1e/6e/1e6ec609ece0649a29b5da5c6c660b66_1354x477.png) 如表5-1所示,getActivity、getService和getBroadcast這三個方法的參數意義都是相同的,第一個和第三個參數比較好理解,這里主要說下第二個參數requestCode和第四個參數flags,其中requestCode表示PendingIntent發送方的請求碼,多數情況下設為0即可,另外requestCode會影響到flags的效果。flags常見的類型有:FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT。在說明這四個標記位之前,必須要明白一個概念,那就是PendingIntent的匹配規則,即在什么情況下兩個PendingIntent是相同的。 PendingIntent的匹配規則為:如果兩個PendingIntent它們內部的Intent相同并且requestCode也相同,那么這兩個PendingIntent就是相同的。requestCode相同比較好理解,那么什么情況下Intent相同呢?Intent的匹配規則是:如果兩個Intent的ComponentName和intent-filter都相同,那么這兩個Intent就是相同的。需要注意的是Extras不參與Intent的匹配過程,只要Intent之間的ComponentName和intent-filter相同,即使它們的Extras不同,那么這兩個Intent也是相同的。了解了PendingIntent的匹配規則后,就可以進一步理解flags參數的含義了,如下所示。 * FLAG_ONE_SHOT 當前描述的PendingIntent只能被使用一次,然后它就會被自動cancel,如果后續還有相同的PendingIntent,那么它們的send方法就會調用失敗。對于通知欄消息來說,如果采用此標記位,那么同類的通知只能使用一次,后續的通知單擊后將無法打開。 * FLAG_NO_CREATE 當前描述的PendingIntent不會主動創建,如果當前PendingIntent之前不存在,那么getActivity、getService和getBroadcast方法會直接返回null,即獲取PendingIntent失敗。這個標記位很少見,它無法單獨使用,因此在日常開發中它并沒有太多的使用意義,這里就不再過多介紹了。 * FLAG_CANCEL_CURRENT 當前描述的PendingIntent如果已經存在,那么它們都會被cancel,然后系統會創建一個新的PendingIntent。對于通知欄消息來說,那些被cancel的消息單擊后將無法打開。 * FLAG_UPDATE_CURRENT 當前描述的PendingIntent如果已經存在,那么它們都會被更新,即它們的Intent中的Extras會被替換成最新的。 從上面的分析來看還是不太好理解這四個標記位,下面結合通知欄消息再描述一遍。這里分兩種情況,如下代碼中:manager.notify(1, notification),如果notify的第一個參數id是常量,那么多次調用notify只能彈出一個通知,后續的通知會把前面的通知完全替代掉,而如果每次id都不同,那么多次調用notify會彈出多個通知,下面一一說明。 如果notify方法的id是常量,那么不管PendingIntent是否匹配,后面的通知會直接替換前面的通知,這個很好理解。 如果notify方法的id每次都不同,那么當PendingIntent不匹配時,這里的匹配是指PendingIntent中的Intent相同并且requestCode相同,在這種情況下不管采用何種標記位,這些通知之間不會相互干擾。如果PendingIntent處于匹配狀態時,這個時候要分情況討論:如果采用了FLAG_ONE_SHOT標記位,那么后續通知中的PendingIntent會和第一條通知保持完全一致,包括其中的Extras,單擊任何一條通知后,剩下的通知均無法再打開,當所有的通知都被清除后,會再次重復這個過程;如果采用FLAG_CANCEL_CURRENT標記位,那么只有最新的通知可以打開,之前彈出的所有通知均無法打開;如果采用FLAG_UPDATE_CURRENT標記位,那么之前彈出的通知中的PendingIntent會被更新,最終它們和最新的一條通知保持完全一致,包括其中的Extras,并且這些通知都是可以打開的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看