我們在進行真實項目開發(fā)的時候抬闯,是一定要用到與后端的數(shù)據(jù)交流。對于初學者來講关筒,與后端交互一件難以想象的事情溶握。到底怎么交互,怎么獲取后臺的數(shù)據(jù)蒸播。其實很簡單睡榆,我們常常用到URLConnection,HttpClient袍榆,Volley的這些框架就是與后端交互的框架胀屿。后端將數(shù)據(jù)放到特定的網(wǎng)頁上,每個網(wǎng)頁都有一個URL地址包雀,網(wǎng)頁的內(nèi)容一般都是JSON或者XMl格式的數(shù)據(jù)碉纳。后臺會給我們各種URL地址,只需要我們根據(jù)URL讀取到JSON馏艾,或者XMl格式的字符串劳曹,進行解析。這就是最簡單與后端數(shù)據(jù)的交互琅摩。
那說回來铁孵,什么紅點提醒。紅點提醒就是將用戶沒有查看的信息標記起來房资。并且顯示在界面上蜕劝。
我隨便拿一個APP例子來舉例說明,在這個APP中有三個需要紅點提醒的東西轰异,分別是貸款客戶數(shù)量岖沛,保險客戶數(shù)量,以及客戶總數(shù)量搭独。
下面這個頁面就是我們進入APP后的主界面婴削。客戶選項的紅點上數(shù)字就是顯示我們沒有查看的客戶總數(shù)量牙肝。
當我們切換到客戶這個fragment時唉俗,會顯示貸款客戶數(shù)量與保險客戶數(shù)量。不會fragment的初學者一定要去了解配椭,用一句話概括就是包含在Activity中虫溜,有自己的生命周期,受到宿主Activity影響的輕量級Activity股缸。
當我們隨便點擊入一個選項衡楞,假如進入到保險客戶的這個activity里面,ListView顯示用戶的信息敦姻,上面標記紅點瘾境,代表沒有沒有查看的客戶坎背,沒有紅點的代表已經(jīng)查看過的客戶數(shù)量。
當我們點擊一個有紅點的客戶信息的時候寄雀,需要向后端發(fā)送信息,代表我已經(jīng)查看了這條信息陨献。并且改變在主Activity的數(shù)量盒犹,和frament中的數(shù)量。如下圖:
那么這個功能怎么實現(xiàn)以及怎么優(yōu)化眨业,我在實現(xiàn)這個功能的時候急膀,經(jīng)歷的三個階段。
第一種階段:
思路:利用SharedPrefrence龄捡,和廣播卓嫂。
具體實現(xiàn):當我們進入主Activity的時候,從后臺讀取數(shù)據(jù)得到客戶總數(shù)量聘殖,保險客戶總數(shù)量晨雳,貸款客戶總數(shù)量,并把它存儲到sharedPrefrence里面奸腺。再將主Activity讀取SharedPrefrence客戶總數(shù)量并顯現(xiàn)出來餐禁。
當我們切換到frament的時候,從SharedPrefrence依次讀取貸款和保險用戶的數(shù)量突照,并且把它呈現(xiàn)出來帮非。
當我們點擊帶有ListView中帶有紅點item的時候,改變SharedPrefrence中的客戶數(shù)量和保險客戶的數(shù)量讹蘑,發(fā)送廣播末盔,通知改變。主Activity和fragment再從SharedPrefrence中對數(shù)據(jù)讀取一次座慰,然后發(fā)生改變陨舱。
我們發(fā)現(xiàn),這個過程中所有操作都要使用到SharedPrefrence版仔,而且代碼全部寫在各種Activity中隅忿,顯得代碼臃腫,代碼沒有復用性邦尊,沒有邏輯背桐。于是演化了第二種思路。
第二種階段
思路:利用靜態(tài)的數(shù)據(jù)擁有與應用的同樣的生命周期蝉揍,舍棄了SharedPrefrence链峭。
具體實現(xiàn):創(chuàng)建一個類,在類中設定3個靜態(tài)整型又沾,分別為客戶總數(shù)量弊仪,保險客戶數(shù)量熙卡,貸款客戶數(shù)量。在這個類中分別寫入三個方法励饵。分別為根據(jù)客戶數(shù)量判斷紅點方法驳癌,根據(jù)保險客戶數(shù)量紅點方法,根據(jù)貸款客戶數(shù)量紅點方法役听。
當我們進入主Activity的時候颓鲜,將得到的數(shù)據(jù)分別存入3個靜態(tài)數(shù)量。然后在主Activity中調(diào)用根據(jù)客戶數(shù)量判斷紅點典予。
當我們進入fragment的時候甜滨,分別調(diào)用根據(jù)保險客戶數(shù)量紅點方法,根據(jù)貸款客戶數(shù)量紅點方法瘤袖。判斷保險客戶和貸款客戶紅點顯示的情況衣摩。
當我們點擊ListView上顯示有紅點的item的時候,改變靜態(tài)的客戶總數(shù)量捂敌,保險客戶數(shù)量艾扮,貸款客戶數(shù)量。發(fā)送廣播給主Activity和Fragment占婉。然后在主Activity調(diào)用根據(jù)客戶數(shù)量判斷紅點的方法栏渺;在fragment中調(diào)用根據(jù)貸款數(shù)量判斷紅點方法或根據(jù)保險客戶數(shù)量判斷紅點方法。
第二種思路提高的代碼的復用锐涯,并且利用的一個中心類控制所有操作磕诊,舍棄了對SharadPrefrence的頻繁使用,根據(jù)我的測試纹腌,還能提高紅點顯示的速度霎终。
第三種階段
思路:不要廣播,利用fragment的生命的周期和Activity的生命周期升薯。
具體實現(xiàn):
在第二種思路上擴展莱褒,繼續(xù)使用一個中心類控制所有操作。
當我們點擊ListView中的帶有紅點item的時候涎劈。只改變相應紅點的數(shù)量广凸,而不發(fā)送廣播。而是在fragment使用在onCreatView()方法和Activity中onResume()方法中調(diào)用判斷紅點顯示情況的方法蛛枚。
我們知道谅海,當我們從fragment的跳轉(zhuǎn)時,會執(zhí)行Fragmeng中的onDestroyView()方法蹦浦,切換回fragment的時候扭吁,會執(zhí)行onCreatView()方法。
跳轉(zhuǎn)Activity的時候會執(zhí)行onStop()方法,跳回的時候會執(zhí)行onResume()方法侥袜。
第三種思路徹底利用生命周期蝌诡,舍棄了廣播的使用和簡化的代碼。
在整過過程的我們發(fā)現(xiàn)枫吧,一個好的思路是在你做項目的過程中慢慢得出來的浦旱,不是我們一步得到的。我們首先要用自己最能想到的方法實現(xiàn)這個功能再說九杂,在這個基礎之上颁湖,在對代碼進行優(yōu)化尤其在開發(fā)實際項目是,速度第一尼酿,性能第二。最好的策略就是快速完成項目植影,然后快速迭代裳擎,優(yōu)化性能和代碼。