如何對(duì)移動(dòng)應(yīng)用做性能優(yōu)化_第1頁(yè)
如何對(duì)移動(dòng)應(yīng)用做性能優(yōu)化_第2頁(yè)
如何對(duì)移動(dòng)應(yīng)用做性能優(yōu)化_第3頁(yè)
如何對(duì)移動(dòng)應(yīng)用做性能優(yōu)化_第4頁(yè)
如何對(duì)移動(dòng)應(yīng)用做性能優(yōu)化_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

如何對(duì)移動(dòng)應(yīng)用做性能優(yōu)化?

任性的代價(jià)2014年“雙十一”轉(zhuǎn)型后的第一個(gè)機(jī)房:1個(gè)變2個(gè)+N多NB服務(wù)器萬(wàn)事俱備、只待下單結(jié)果....別仗著硬件NB任性?。。∥矣X得問題不大,可以忍~上線前上線后哪些方面?需求:哪些指標(biāo)需要優(yōu)化定位:性能問題在哪里解決:優(yōu)化方法4常見性能指標(biāo)啟動(dòng)速度列表頁(yè)滾動(dòng)平滑點(diǎn)擊事件響應(yīng)圖片加載快省電內(nèi)存占用....不同產(chǎn)品,不同流程,優(yōu)化方法不同思路和理念比實(shí)際方法更重要–Paretoprinciple“formanyevents,roughly80%oftheeffectscomefrom20%ofthecauses.”定位性能瓶頸71、啟動(dòng)速度2、滑動(dòng)平滑性4、內(nèi)存占用3、網(wǎng)絡(luò)響應(yīng)時(shí)間啟動(dòng)速度優(yōu)化延時(shí)初始化人的反應(yīng)時(shí)間150ms~400ms看到啟動(dòng)完成到開始下一步操作有一個(gè)停頓在onCreate,onResume等回調(diào)方法中只進(jìn)行ui初始化利用空閑時(shí)間動(dòng)畫間隙濺起頁(yè)請(qǐng)求全局配置數(shù)據(jù),緩存到本地。資源文件拷貝自定義字體網(wǎng)絡(luò)圖片圖片很多自動(dòng)加載更多

如何保證流暢滑動(dòng)?找瓶頸?。?!滑動(dòng)平滑性優(yōu)化-ListView9重用ConvertView10滑動(dòng)平滑性優(yōu)化-ListView使用ViewHolder11以上這兩步是谷歌官方強(qiáng)烈推薦的做法,不只適用于ListView,也適用于GridView等如果沒有特殊情況,所有ListView的Adapter都應(yīng)該這樣處理。注意:這是一個(gè)靜態(tài)內(nèi)部類面試時(shí)通過類似細(xì)節(jié),分辨開發(fā)者水平和經(jīng)驗(yàn)滑動(dòng)平滑性優(yōu)化-ListView跟蹤Scroll事件12該函數(shù)執(zhí)行時(shí)間直接影響ListView滑動(dòng)的流暢性。該函數(shù)的內(nèi)部實(shí)現(xiàn)要遵循以下原則:只做getView()必須做的操作,其它無(wú)關(guān)操作一定要放到外部。例如:自定義字體加載耗時(shí)操作一定要放到另外的WorkThread執(zhí)行。例如:圖片的加載,網(wǎng)絡(luò)請(qǐng)求等。優(yōu)化getView()如果ListView的內(nèi)容特別復(fù)雜,為進(jìn)一步提升流暢性,可以考慮跟蹤Scroll的滑動(dòng)事件,在滑動(dòng)時(shí)暫停其它Thread或降低優(yōu)先級(jí)滑動(dòng)平滑性優(yōu)化-ListView13建議使用第三方庫(kù),例如:picasso,volley等。但是,一定要了解庫(kù)的實(shí)現(xiàn)原理。(AsyncHttpClient的例子)如何加載網(wǎng)絡(luò)圖片滑動(dòng)平滑性優(yōu)化-ListView14庫(kù)的實(shí)現(xiàn)原理ImageView加載圖片請(qǐng)求是否在內(nèi)存緩存?開啟Thread是否在文件系統(tǒng)?更新圖片內(nèi)存緩存從網(wǎng)絡(luò)加載圖片更新文件緩存ImageView加載圖片是否否是二級(jí)緩存Md5索引一級(jí)緩存LruCache線程池滑動(dòng)平滑性優(yōu)化-ListView工作線程如何更新UI?Runnabletask=getTask();newHandler(Looper.getMainLooper()).post(task);能用AsyncTask代替嗎?15LruCache實(shí)現(xiàn)原理:滑動(dòng)平滑性優(yōu)化-ListView滑動(dòng)平滑性優(yōu)化-ListView圖片服務(wù)器防止惡意攻擊縮放裁剪留白圓角灰度濾鏡壓縮銳化1234567回顧性能瓶頸171、啟動(dòng)速度2、滑動(dòng)平滑性4、內(nèi)存占用3、網(wǎng)絡(luò)響應(yīng)時(shí)間延遲初始化利用空閑時(shí)間重用ConvertViewViewHolder優(yōu)化getView異步請(qǐng)求網(wǎng)絡(luò)圖片圖片服務(wù)器問:如何提高網(wǎng)絡(luò)請(qǐng)求響應(yīng)速度?答:1.多線程并發(fā)請(qǐng)求。2.棄用xml,采用json、protobuf。3.gzip壓縮問:如何解決請(qǐng)求過多,線程占用資源問題?答:隊(duì)列+線程池(newCacheThreadPool)(Volley,AsyncHttpClient)問:如何解決集合訪問沖突問題?答:

ConcurrentHashMap、ConcurrentLinkedQueue

關(guān)注

java.util.concurrent網(wǎng)絡(luò)響應(yīng)時(shí)間AsyncHttpClientContextListContextListContextListContextListRequestHandleRequestHandleAsyncHttpRequestnewCachThreadPoolRequestResponseCollection.synchronized(newWeakHashMap())Collection.synchronized(newArrayList())newFixedThreadPool回顧性能瓶頸201、啟動(dòng)速度2、滑動(dòng)平滑性4、內(nèi)存占用3、網(wǎng)絡(luò)響應(yīng)時(shí)間延遲初始化利用空閑時(shí)間重用ConvertViewViewHolder優(yōu)化getView異步請(qǐng)求網(wǎng)絡(luò)圖片圖片服務(wù)器Json+gzip并發(fā)請(qǐng)求善用第三方庫(kù)內(nèi)存問題單例模式觀察者模式SoftReferenceVSWeakReference單例對(duì)象NotificationManager.getInstance(this).update(XXX);1.只要應(yīng)用進(jìn)程存在,單例對(duì)象就存在。2.構(gòu)造參數(shù),只會(huì)在第一次時(shí)有用,之后的都不會(huì)被用3.盡量不寫帶構(gòu)造參數(shù)的單例4.如果要用context,首先考慮applicationcontext。觀察者模式ListenerListenerListenerAddListenerRemoveListenerList<Listener>注意內(nèi)存泄露:List<Listener>是單例的成員List<Listener>是static易犯錯(cuò)誤:AddListener和RemoveListener沒有配對(duì)使用,就會(huì)內(nèi)存泄露解決方法:WeakReferenceSoftReferenceVSWeakReference強(qiáng)引用除非即將OutOfMemory,否則不會(huì)被GC回收適合Cache,例如:SoftReference<Bitmap>SoftReference弱引用執(zhí)行GC時(shí),就會(huì)被回收WeakReference看起來(lái)很美實(shí)際上......什么時(shí)候會(huì)執(zhí)行GC?Activity1Activity2CityManagerWeakReference:當(dāng)弱引用對(duì)象被其他人以非弱引用持有時(shí),該對(duì)象不會(huì)被回收。否則,很快會(huì)被回收。換句話說(shuō),弱引用對(duì)象如果是最后一個(gè)持有該對(duì)象的人,該對(duì)象很快會(huì)被回收。嵌套類NestedClass靜態(tài)成員類staticmemberclass非靜態(tài)成員類nonstaticmemberclass匿名類anonymousclass局部類localclasspublicclassA{ classB{}}publicclassA{ staticclassC{}}voidfun(){newView.OnClickListener{};}staticvoidfun(){newView.OnClickListener{};}voidfun(){ classD{}}staticvoidfun(){ classE{}}內(nèi)部類

Innerclass不持有一定持有可能持有可能持有Handler內(nèi)存泄露持有外部Activity的引用靜態(tài)成員類Activity的弱引用Thread內(nèi)存泄露思考:用AsyncTask是不是就沒問題了?回顧性能瓶頸301、啟動(dòng)速度2、滑動(dòng)平滑性4、內(nèi)存占用3、網(wǎng)絡(luò)響應(yīng)時(shí)間延遲初始化利用空閑時(shí)間重用ConvertViewViewHolder優(yōu)化getView異步請(qǐng)求網(wǎng)絡(luò)圖片圖片服務(wù)器Json+gzip并發(fā)請(qǐng)求善用第三方庫(kù)單例+

觀察者Soft/WeakReferencen嵌套類其他-自定義字體Calligraphy庫(kù)其他第三方庫(kù)

做過這些嘗試美麗說(shuō)

全部用自定義控件,例如:CustomTextView美喵TypefaceHelper,從父節(jié)點(diǎn)遍歷統(tǒng)一修改

現(xiàn)在是這樣不靠譜WAP頁(yè)如何自定義字體?@font-face{font-family:'myfont';src:url(‘res/font.ttf');}url(‘file:///android_asset//font.ttf');url(‘file:////d

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論