《APP研發錄》讀記(二)
##第三章:經典場景設計
###圖片快取設計:
圖片快取的出現是為了避免出現OOM問題,根據需要對圖片的載入進行一些壓縮和優化,它主要完成三個任務:
-
圖片的快取,可以有效的減少對於流量的消耗,優化使用者體驗
-
圖片的壓縮載入,降低載入大圖時出現OOM的機率,保證魯棒性
-
完成圖片的非同步載入,可以簡化開發
###網路流量優化:
-
對於網路請求回來的大量資料(大於1K)開啟gzip壓縮
-
儘量減少網路請求次數
-
要建立網路請求取消機制,在離開當前頁面時需要能將該頁面上發出的網路請求都取消了
-
良好的網路請求設計是要加入重試機制(get)和防重機制(post)
-
對於請求的網路圖片要進行合適的裁剪(一般在圖片載入器中進行配置)
-
優秀的網路框架需要充分考慮在4G/3G甚至是2G網路狀態下的情況,可以通過區分網路情況而決定載入圖片的質量或者是是否載入圖片(省流量模式和極速模式)
###城市列表的設計:
城市列表常見的解決方案有一下幾種:
-
把所有的城市都寫死在本地的檔案中
-
每次都通過網路請求進行獲取
-
將資料儲存在本地並標註版本號,每次啟動APP時都進行更新檢查,若有新版的城市列表則下載新版的城市列表到本地中。
-
將資料儲存在本地並標註版本號,每次檢查更新時並不是更新全部,而是增量更新
###原生和H5的互動:
####原生呼叫H5的方法:
- 在H5中定義好方法
- 在原生中啟用JavaScript,並在原生的點選事件中通過WebView來載入要執行的JavaScript方法,並傳如引數。
//HTML中的程式碼 <script type="text/javascript"> function changeColor(color){ document.body.style.backgroundColor = color; } </script> //Android中的程式碼,呼叫了HTML中的changeColor方法 webView.getSettings().setJavaScriptEnable(true); webView.loadUrl("http://www.wei/text.html"); btn.setOnClickListener(new View.OnClickListener(){ @override public void onClick(){ String color = "#00ee00"; webView.loadUrl( "javascript:changeColor('"+ color+"');"); } });
####H5呼叫原生的方法:
- 在原生中定義好呼叫介面的方法
- 通過WebView將定義好的介面方法註冊了
- 在JavaScript中直接呼叫方法,並傳入引數
//H5頁面呼叫原生的callAndroidMethod()方法
<a onclick="baobao.callAndroidMethod(100,100,"ccc",true)">點選呼叫原生方法<a/>
//原生定義好介面方法
class JSInterface{
public void callAndroidMethod(int a,int b,String c,boolean d){
if(d){
String message = "-"+(a+1)+"-"+(b+1)+"-"+c+"-"+d;
new AlertDialog.Builder(MainActivity.this)
.setTitle("title")
.setMessage(message)
.show();
}
}
}
//通過webView將定義好的方法註冊
webView.addJavaScriptInterface(new JSInterface(),"baoabo");
###消滅全域性變數:
-
將資料放在Intent中進行傳輸(資料量不能過大)
-
把全域性變數序列化到本地,這樣可以保證資料的永續性,但是也有很多的硬傷,包括執行緒同步問題,IO讀寫問題
-
UserManager是唯一的全域性變數,
##第三章:Android命名和編碼規範
關於命名和編碼規範,每個團隊有自己獨有的習慣,這個並沒有生特別硬性的規定,只要符合一般的規範就好。
-
命名要見名知意,不要起無意義的名字
-
佈局檔名,可以根據用途來加縮寫字首來區分,例如MainActivity的佈局檔案可以寫成act_main.xml等
-
佈局檔案中的字串,顏色值,尺寸等都放到對應的value檔案中,不直接寫死在佈局檔案中
-
常量一般都是大寫字母組成,通過下劃線分割單詞
編碼規範主要是為了提高開發效率和便於後期維護而制定的規則,主要還是需要有一個統一的風格格式。