優化服務app
1. 優化類APP有用嗎,原理是什麼,為什麼優化了系統還是卡
一、盡量減少Service的使用:
當你的app需要使用service來處理後台任務的時候,要保證當前的任務完成時,該service也要停止。另外,要注意的是,當停止這個service的時候,不要引起它的泄漏。
當啟動一個service之後,系統總會保持這個service處於運行狀態。這樣,就會佔用大量的RAM。所以,app的運行效率就會因此降低。
保留沒有用的service最可怕的內存管理錯誤。所以,一定要牢記,沒有必要使用service的時候就不用,用完了一定要記得將它銷毀,,,,
二、當界面變為不可見時,要記得釋放內存:
當用戶跳轉到其他界面時,並且當前界面不再可見的時候,要記得釋放當前這個界面中的資源。
當用戶退出某個界面時,記得在你的activity中實現onTrimMemory()(api4.0及以上)這個回調方法。調用這個方法,系統會收集不需要的內
三、當內存變少時,釋放內存:
在你的app運行過程中,當運行該app的設備所剩的RAM變得很少時,系統就會調用onTrimMemory()這個方法,這個方法中有幾個參數,表示不同的狀態。onTrimMemory()的具體使用,還請大家參加Android的開發文檔吧,本人手懶,就不詳細介紹啦。
四、檢查你所需要使用的內存:
可以通過getMemoryClass()估計一下你的app可用的heap。當你的app所需要的內存超過了這個可用值時,好了內存溢出就出現了。
這里有一個很特殊的方法,可以通過在manifest <application>標簽中將largeHeap的屬性值設置為true來請求更大的內存,主要注意的是,如果你採用了這種方法,那麼當你想要獲取可用內存時,就要使用 getLargeMemoryClass()。
不過由於每台機器的RAM是有限的,所以用這個還是小心吧,不需要用的時候還是不用了吧。
五、避免由bitmap引起的內存浪費:
bitmap還是很占內存的啊,當我們使用它的時候一定要小心。有幾個需要注意的方法:
1、不要直接使用這樣會佔用很大的內存,使用BitmapFactory.Options設置inSampleSize,根據手機屏幕大小來設置bitmap的大小, 這樣做可以減少對系統資源的要求。
2、緩存圖像到內存,採用軟引用緩存到內存,而不是在每次使用的時候都從新載入到內存;
3、採用低內存佔用量的編碼方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省內存;
4、最後就是最重要的一點,當bitmap使用完之後一定要記得回收,,,
六、使用優化過的數據容器
盡量使用 SparseArray, SparseBooleanArray, LongSparseArray 等經過優化的容器類。通常來說HashMap的效率時比較低下的。
七、小心使用抽象類(方法)
適當的使用抽象類和方法能夠使我們的代碼更加靈活、易維護,但是這樣會增加app的內存佔用。所以,那些無關痛癢的東西,還是別抽象了。
2. 移動 app 從哪些 方面優化
定了四個方向:
- 響應時間(Response Time)
- 界面卡頓(ANR)
- 耗內存(Memory)
- 內存泄露(Out of memory)
響應時間
這里指的是客戶端與服務端交互,拿到數據、解析、再到顯示到界面整個過程耗費的時間。
這個部分涉及客戶端的優化,也涉及服務端的優化,這里只討論客戶端。
HTTP請求方式
我們的app一般離不開網路,請求介面是最平常的操作了,如何請求,請求什麼我們在開發初期就要定好,服務端給我的提供的介面,大致可以通過GET、POST、HEAD、PUT、DELETE這幾種請求方式,不同的請求方式有不同應用場景,比如GET請求,應當用來請求返回結果,參數是作為url的一部分;POST請求,用於請求會更改服務端數據或狀態;HEAD請求跟GET一樣,只是伺服器不能在響應里返回消息主體;PUT請求,用於將網頁放置正確的地方;DELETE請求用於刪除伺服器指定文檔。
使用優秀的開源Http框架是我們比較好的選擇,它的優點是經過市場的驗證,很多坑都被填過,缺點也是我們需要去深究它才能對其進行擴展,遇到坑也不一定能填。
如果自己造輪子的話,還需要我們花時間去驗證去適應我們的業務需求,但好處是我們可以自己去擴展可把控,不過這很考量開發者的素質。
數據解析
實際開發當中服務端的返回數據格式無非就兩種:
- JSON
- XML
這兩種格式數據格式各有優劣,從可讀性來看,xml略微好一點,不過JSON也有規范的標簽,從解析難度和速度來看,大家都比較傾向使用JSON,目前JSON也是主流的數據格式。
在Android中均可以使用優秀的解析庫來加快我們的解析速度,XML中有dom4j,JSON有Jackson、Gson,我們通過這些庫實現我們更快的完成數據解析,提高我們的開發效率。
數據存儲
上一節講的是數據解析,我們解析完後的數據,可能就需要將數據存儲在某個地方,Android的五種存儲方式:
- Content Provider(主要用來向其他應用程序共享數據)
- SQLite(存儲數據到資料庫中)
- File(本地文件保存)
- SharedPreference(主要用來保存簡單的配置信息)
- 網路存儲(WebService返回的數據或是解析HTTP協議實現網路數據交互)
為了提高應用程序的響應時間,數據緩存是一個比較好的方式,我們可以預處理伺服器返回的數據,對數據進行緩存刷新。
優化點:
- 非同步請求網路數據
- 預處理伺服器返回數據
- 非同步進行數據存儲操作
- 數據緩存刷新
- Timeout超時重試
- 在主線程中操作UI
界面卡頓
ANR表示」應用程序無響應」,這個是需要我們避免發生的事情,出現這個異常的原因:
- 主線程 (「事件處理線程」 / 「UI線程」) 在5秒內沒有響應輸入事件
- BroadcastReceiver在10秒內沒有執行完畢
導致ANR的原因有很多,一般情況就是在UI線程做了耗時的操作,例如」網路請求」、資料庫操作。
那麼如何避免?
- UI線程只做界面刷新,不做任何耗時操作,耗時操作放在子線程來做
- 可以使用Thread+handle或者AsyncTask來進行邏輯處理
耗內存
每部手機的內存有限,我們這里所說的內存指的是手機的RAM,它是Ramdom Access Memory的縮寫,我們應用程序的需要隨機讀寫的數據就存在RAM中,Android手機之所以會比較耗內存,這跟Android後台的處理有關,我們知道Android應用是使用Java開發的,運行Java需要有虛擬機,說明每開啟一個應用都會創建一個虛擬機,而這是需要內存的,所以我們開的應用越多,後台進程越多,內存都分配出去了,才導致內存消耗的嚴重。
其實這個問題我們是沒得破的,只要內存不夠,我們的應用還是會卡。我們開發的應用依賴與系統給我們分配的堆內存,一般上限在16M~48M,但我們可以通過在AndroidManifest設置Application屬性largeHeap=「true」來申請更多的堆內存。
通過以下代碼獲取可用堆內存限制:
mActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
mMaxMemory = mActivityManager.getMemoryClass();1212
內存泄露
內存泄露這個問題已經被說爛了,大家都知道有內存泄露這個問題存在,但為什麼會發生內存泄露?
這里的內存泄露並不是真正意思上的泄露,而是因為內存不足不能進行GC操作,從而導致佔用內存過大,拋出out of memory異常,而被系統Kill掉。
JVM回收機制
是時候講講JVM的回收機制了,看下圖:
JVM對Java對象分了三個代進行管理,分別為年輕代、年老代、永久代。
年輕代(Young Generation):絕大多數的Java對象會在年輕代被分配,也會在年輕代被回收。
年老代(Old Generation):在年輕代長期存在沒有被回收的Java對象會轉移到年老代,這個堆空間通常會被比年輕代的堆空間要大。
永久代:存放VM和Java類的元數據,以及interned字元串和類的靜態變數。
這里涉及到JVM的相關知識,這里不繼續深入探討。
但我們應該可以知道垃圾回收器的作用:
- 分配內存
- 保證所有正在被引用的對象還存在於內存中
- 回收執行代碼已經不再引用的對象所佔的內存
對象引用
Java的引用類型可以分為以下幾種:
- 強引用(Strong Ref):強可達,去掉強可達,才會被回收。
- 軟引用(Soft Ref):內存夠用,就保持,內存吃緊,則回收,主要用來做緩存。
- 弱引用(Weak Ref):比Soft Ref弱,即使內存不吃緊也會被回收。
- 虛引用(Phantom Ref):不會在內存保持任何對象。
3. 哪個優化安卓手機APP
如需下載第三方應用軟體(好玩的游戲、常用工具應用、系統輔助工具等),建議可以專通過自帶的應用商店屬或手機論壇等搜索目前較為熱門的軟體。
1、若您的手機自帶應用商店,可以按照如下方式查找:應用程序-應用商店-點擊熱門推薦」可以查看到當前較為熱門的軟體/游戲。您也可以按照分類,根據軟體類型選擇自己喜歡的軟體
2、 通過手機瀏覽器搜索需要的軟體下載安裝(若是自帶的瀏覽器,下載的安裝包保存在我的文件-Download文件夾中)。
3、通過第三方助手類軟體下載安裝需要的程序。
4、通過電腦下載APK格式的安裝包,然後傳輸到手機中安裝。
4. 手機用什麼app優化
部分三星手機內置「智能管理器」或「內存管理器」程序,用以控制手機啟專動自運行應用程序屬數量、清除垃圾文件、掃描設備並查找是否存在威脅設備的惡意軟體或未經授權的系統更改等。
如手機中沒有內置「智能管理器」,若擔心手機會受到第三方不明軟體的影響時,建議您可以通過三星應用商店或其他安卓市場類軟體中下載安全優化軟體。
5. 在app store 上怎麼做app優化排名
重點關注幾個數據:
1)app新增、留存、日活、用戶評論評星
2)當前版本關鍵詞覆蓋、及搜索排名情況
3)當前流量來源,是否有一些外部渠道可用,量有多少
從這些數據上大致可以判斷出一款app當前所處的階段,從而制定不同的關鍵詞優化策略。
(1)搜索優化:1、展現優化(應用名、關鍵詞、iap、廠商)
(2)排序優化(歷史下載和當前下載);
(3)相關搜索優化:首文字優化;
(4)榜單優化:以合作沖量,限免沖量,刷榜沖量為主;
(5)轉化率優化:icon,廠商名稱,描述,評價優化。
6. 優化管理的app有哪些
優化什麼呢,如果是優化手機系統可以選擇360手機衛士或者騰訊手機管家,是目前比較主流的軟體
7. app優化工具有哪些怎麼優化
吆喝科技的ab測試
8. 如何優化app的運行內存佔用
一、盡量減少Service的使用:
當你的app需要使用service來處理後台任務的時候,要保證當前的任務完成時,該service也要停止。另外,要注意的是,當停止這個service的時候,不要引起它的泄漏。
當啟動一個service之後,系統總會保持這個service處於運行狀態。這樣,就會佔用大量的RAM。所以,app的運行效率就會因此降低。
保留沒有用的service最可怕的內存管理錯誤。所以,一定要牢記,沒有必要使用service的時候就不用,用完了一定要記得將它銷毀,,,,
二、當界面變為不可見時,要記得釋放內存:
當用戶跳轉到其他界面時,並且當前界面不再可見的時候,要記得釋放當前這個界面中的資源。
當用戶退出某個界面時,記得在你的activity中實現onTrimMemory()(api4.0及以上)這個回調方法。調用這個方法,系統會收集不需要的內
三、當內存變少時,釋放內存:
在你的app運行過程中,當運行該app的設備所剩的RAM變得很少時,系統就會調用onTrimMemory()這個方法,這個方法中有幾個參數,表示不同的狀態。onTrimMemory()的具體使用,還請大家參加Android的開發文檔吧,本人手懶,就不詳細介紹啦。
四、檢查你所需要使用的內存:
可以通過getMemoryClass()估計一下你的app可用的heap。當你的app所需要的內存超過了這個可用值時,好了內存溢出就出現了。
這里有一個很特殊的方法,可以通過在manifest <application>標簽中將largeHeap的屬性值設置為true來請求更大的內存,主要注意的是,如果你採用了這種方法,那麼當你想要獲取可用內存時,就要使用 getLargeMemoryClass()。
不過由於每台機器的RAM是有限的,所以用這個還是小心吧,不需要用的時候還是不用了吧。
五、避免由bitmap引起的內存浪費:
bitmap還是很占內存的啊,當我們使用它的時候一定要小心。有幾個需要注意的方法:
1、不要直接使用這樣會佔用很大的內存,使用BitmapFactory.Options設置inSampleSize,根據手機屏幕大小來設置bitmap的大小, 這樣做可以減少對系統資源的要求。
2、緩存圖像到內存,採用軟引用緩存到內存,而不是在每次使用的時候都從新載入到內存;
3、採用低內存佔用量的編碼方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省內存;
4、最後就是最重要的一點,當bitmap使用完之後一定要記得回收,,,
六、使用優化過的數據容器
盡量使用 SparseArray, SparseBooleanArray, LongSparseArray 等經過優化的容器類。通常來說HashMap的效率時比較低下的。
七、小心使用抽象類(方法)
適當的使用抽象類和方法能夠使我們的代碼更加靈活、易維護,但是這樣會增加app的內存佔用。所以,那些無關痛癢的東西,還是別抽象了。
9. 如何優化app的運行內存佔用問題
下面的方法可以優化app的運行內存:
1、內存資源緊張時釋放內存
在應用生命周期的任何階段onTrimMemory()回調方法都可以告訴你設備的內存越來越低的情況,
你可以根據該方法推送的內存緊張級別來釋放資源.
2、使用優化後的數據容器
利用 Android 框架優化後的數據容器, 比如SparseArray,SparseBooleanArray和LongSparseArray.
傳統的 HashMap 在內存上的實現十分的低效因為它需要為 map 中每一項在內存中建立映射關系. 另外,SparseArray類非常高效因為它避免系統中需要自動封箱(autobox)的key。
3、使用保守的Service
如果你的應用需要使用 service 在後台執行業務功能, 除非是一直在進行活動的工作(比如每隔幾秒向伺服器端請求數據之類)否則不要讓它一直保持在後台運行. 並且, 當你的service執行完成但是停止失敗時要小心service導致的內存泄露問題.
4、當心抽象代碼
通常來說, 使用簡單的抽象是一種好的編程習慣, 因為一定程度上的抽象可以提供代碼的伸縮性和可維護性. 然而抽象會帶來非常顯著的開銷: 需要執行更多的代碼, 需要更長時間和更多的運行內存把代碼映射到內存中, 所以如果抽象沒有帶來顯著的效果就盡量避免.
那麼如何查看APP運行內存佔多少?
手機查看運行內存的方法:
1.部分手機內置內存管理器/智能管理器,開啟該應用可查看內存使用情況。
2.部分機器:長按Home鍵-進入任務管理器-RAM狀態-查看即可。
提示:不同型號手機查看路徑可能略有不同。