# Notification 源碼分析

引言

首先推薦個我整理的Notification樣式

notification.jpg

Notification 在v7版本下從4.0后增加了Media Style. 今天我們分析下Notification在v7版本的源碼。有助于我們針對不同版本的Notification做出合適樣式選擇。

Notification使用流程

現(xiàn)在我們使用Notification基本都是如下步驟:

  • NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
  • builder.setContentText

    .setSmallIcon

    .set...
  • Notification notification = builder.build();
  • notificationManager.notify(TYPE_BigText,notification);

我們看一下涉及到的類定義:

NotificationCompat

Helper for accessing features in Notification introduced after API level 4 in a backwards compatible fashion.

幫助Notification存儲細節(jié)。

NotificationCompat.Builder

Builder class for NotificationCompat objects. Allows easier control over all the flags, as well as help constructing the typical notification layouts.

NotificationCompat對象的構(gòu)造器類,構(gòu)造Notification的樣式。

當Notification構(gòu)建好之后最后一個步驟:

NotificationManager

Post a notification to be shown in the status bar. If a notification with the same id has already been posted by your application and has not yet been canceled, it will be replaced by the updated information.

推送一個Notification到狀態(tài)欄,如果應用中已經(jīng)有了一個同樣的Notification Id 將會被代替并更新。

Android support v7中的Notification相關(guān)類

v7對v4中的Notification進行擴展。

v7下NotificationCompat的定義

v7_NotificationCompat.jpg

然后我來看下NotificationCompat.Builder的定義

v7_NotificationCompat.Builder.jpg

Builder重寫了v4下的getExtender() method,看下返回類型BuilderExtender 找到這樣的定義

Interface for appcompat to extend v4 builder with media style.

appcompat 用來擴增v4 media style 的接口

我們再仔細看getExtender中的代碼,針對不同版本sdk,返回不同版本的BuilderExtender.

針對ICE_CREAM_SANDWICH版本的BuilderExtender的代碼看下:

v7_Notification_Extend.jpg

內(nèi)部調(diào)用add方法進行整理樣式

用table顯示不同版本擴展mediastyle的method.

版本 | 整理樣式的方法
------------- | -------------| -------------
LOLLIPOP (>=Android 5.1) | addMediaStyleToBuilderLollipop
JELLY_BEAN (>=Android4.1&&<Android 5.1) | addMediaStyleToBuilderIcs
ICE_CREAM_SANDWICH (>=Android4.0&&<Android 4.1) | addBigMediaStyleToBuilderJellybean
<Android 4.0 | 使用v4里的樣式整理方法

從這個表格可以知道 4.0以后才出現(xiàn)的Media Style.

再看v4下Builder.build method

v4_NotificationCompat_Builder_build.jpg

最終是通過BuilderExtender構(gòu)造Notification.

總結(jié)

  • Builder構(gòu)造好樣式后,會根據(jù)不同版本生成不同的BuilderExtender.
  • 如果你想知道Notification在不同版本上的限制,你只需要查看不同版本的BuilderExtender的區(qū)別即可。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文出處: http://www.androidchina.net/6174.html Notification在...
    木木00閱讀 12,530評論 3 32
  • 轉(zhuǎn)載自:http://blog.csdn.net/vipzjyno1/article/details/252480...
    HEXG_閱讀 6,106評論 0 2
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,307評論 0 17
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,837評論 2 45
  • 咱們在生活中,總是忍不住和別人比的事兒。社交網(wǎng)絡的出現(xiàn),太容易讓我們知道別人比我們有錢,比我們有名,比我們...
    30151cce33e3閱讀 749評論 0 0

友情鏈接更多精彩內(nèi)容