第三章 经典场景设计
生活随笔
收集整理的這篇文章主要介紹了
第三章 经典场景设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖片緩存:
ImageLoader的知識點講的比較老,暫不總結(題外話:推薦Glide或者Fresco,但是一定要進行二次封裝,否則誰知道哪天心血來潮,想著換個框架試試呢)
圖片加載利器Fresco: 配置文件配置: <uses-permissionandroid:name="android.permission.INTERNET"/> 在application中進行初始化: Fresco.initialize(context); 將程序中顯示圖片的ImageView替換為SimpleDraweeView,并添加fresco命名空間: <!-- 其他元素 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto"> 加入SimpleDraweeView: <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="20dp" android:layout_height="20dp" fresco:placeholderImage="@drawable/my_drawable" /> 在activity或者fragment里面加載網絡圖片: Uri uri =Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png"); SimpleDraweeView draweeView =(SimpleDraweeView) findViewById(R.id.my_image_view); draweeView.setImageURI(uri); Image pipeline工作流: Freso三層緩存概念: ? bitmap緩存:5.0,bitmap緩存在heap堆中。 4.0及以下:bitmap位于ashmem中,而不是java的heap中,不會因為圖片創建,回收引發過多gc,當App切換到后臺,會清空bitmap緩存。 ? 內存緩存:存儲圖片原始壓縮格式,從內存中取出來并解碼,切換后臺,清理內存緩存。 ? 磁盤緩存:存儲在本地,不會丟失。 網上fresco中文文檔可以看下:http://fresco-cn.org/docs/index.html#_網絡流量優化:
城市列表數據:
城市列表信息,一般包括以下內容: cityid 城市id cityname 城市名稱 pinyin 城市拼音 jianpin 城市簡拼音 (題外話,一般項目中有兩種方式來獲取城市列表信息: 1,直接db文件或者json文件, 2,每次從服務器端獲取,但是序列化本地,讀取的時候從緩存文件里面讀取 ) 對于2的問題,其實還是有個問題存在的,就是你每次都去序列化這些內容嗎,或者說每次都從服務器端獲取緩存數據庫或者文件里面嗎,很明顯是不明智的。 ? 書里面針對上面的問題,其實在json結構設計的時候進行比較合適的方式來進行解決: {"citys" : {},"isMatch" : false,"version" : 1 } isMatch:表示是否本地version和服務器端城市列表信息的version一致。 version:城市列表數據的版本信息。 citys:城市列表數據。 給城市列表的json數據加上version字段,如果version字段不變化,第二次就不去更新這些內容,當version字段發生變化額時候,再對數據進行遞增。 App這邊的策略:城市列表信息增量更新:?
分為2種情況:?
delete 刪除 刪除指定cityid的城市信息 update 更新 更新某cityid的城市信息 add 增加 增加新的城市信息App與html5的交互:
代碼地址:https://github.com/icodeu/AppProgrammingSource/tree/master/3.4%20App%E4%B8%8EHtml5%E4%BA%A4%E4%BA%92 html5和native直接靈活切換: 兩套界面 native html5各一套,通過接口里面字段控制是展示native還是html5界面。 策略:消滅全局變量:
當app切換到后臺,之前存放的全局變量會很容易回收,如果切換回前臺,可能會因為使用某個全局變量,但這時變量為null而崩潰。 解決辦法: 序列化。 使用intent來進行數據傳遞(缺點,不能攜帶數據量大的數據)。 將數據序列化到本地,如果內存中的變量回收,就從本地去獲取。 上面方案的問題:如果Activity也被銷毀了呢?
onSaveInstanceState() onRestoreInstanceState() ? User是唯一的全局變量(指的是用戶信息,登錄后獲取到的,客戶端是應該長期緩存的,除非注銷登錄)。?
總結
以上是生活随笔為你收集整理的第三章 经典场景设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AOP之PostSharp7-解决IOC
- 下一篇: 允许java运行不安全或不可信的应用程序