安卓優化方法
『壹』 安卓手機性能差怎麼辦 優化方法都有哪些
安卓手機優化可以藉助一些優化軟體來對手機進行優化,可以通過騰訊手機管家上回面的手機優化功答能來對手機進行優化,進入主頁面,點擊一鍵優化,就可以關閉後台運行程序,清理手機內存,和檢測開機自啟軟體等,優化手機的額性能。
『貳』 Android 性能優化的方法是什麼請從開發者的角度回答!
常我們寫程序,都是在項目計劃的壓力下完成的,此時完成的代碼可以完成具體業務邏輯,但是性能不一定是最優化的。一般來說,優秀的程序員在寫完代碼
之後都會不斷的對代碼進行重構。重構的好處有很多,其中一點,就是對代碼進行優化,提高軟體的性能。下面我們就從幾個方面來了解Android開發過程中
的代碼優化。
1)靜態變數引起內存泄露
在代碼優化的過程中,我們需要對代碼中的靜態變數特別留意。靜態變數是類相關的變數,它的生命周期是從這個類被聲明,到這個類徹底被垃圾回收器回收
才會被銷毀。所以,一般情況下,靜態變數從所在的類被使用開始就要一直佔用著內存空間,直到程序退出。如果不注意,靜態變數引用了佔用大量內存的資源,造
成垃圾回收器無法對內存進行回收,就可能造成內存的浪費。
先來看一段代碼,這段代碼定義了一個Activity。
復制代碼 代碼如下:
private static Resources mResources;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
if (mResources == null) {
mResources = this.getResources();
}
}
這段代碼中有一個靜態的Resources對象。代碼片段mResources =
this.getResources()對Resources對象進行了初始化。這時Resources對象擁有了當前Activity對象的引
用,Activity又引用了整個頁面中所有的對象。
如果當前的Activity被重新創建(比如橫豎屏切換,默認情況下整個Activity會被重新創建),由於Resources引用了第一次創建
的Activity,就會導致第一次創建的Activity不能被垃圾回收器回收,從而導致第一次創建的Activity中的所有對象都不能被回收。這個
時候,一部分內存就浪費掉了。
經驗分享:
在實際項目中,我們經常會把一些對象的引用加入到集合中,如果這個集合是靜態的話,就需要特別注意了。當不需要某對象時,務必及時把它的引用從集合中清理掉。或者可以為集合提供一種更新策略,及時更新整個集合,這樣可以保證集合的大小不超過某值,避免內存空間的浪費。
2)使用Application的Context
在Android中,Application
Context的生命周期和應用的生命周期一樣長,而不是取決於某個Activity的生命周期。如果想保持一個長期生命的對象,並且這個對象需要一個
Context,就可以使用Application對象。可以通過調用Context.getApplicationContext()方法或者
Activity.getApplication()方法來獲得Application對象。
依然拿上面的代碼作為例子。可以將代碼修改成下面的樣子。
復制代碼 代碼如下:
private static Resources mResources;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
if (mResources == null) {
// mResources = this.getResources();
mResources = this.getApplication().getResources();
}
}
在這里將this.getResources()修改為
this.getApplication().getResources()。修改以後,Resources對象擁有的是Application對象的引
用。如果Activity被重新創建,第一次創建的Activity就可以被回收了。
『叄』 安卓手機運行十分慢,如何有效的進行手機管理
安卓手機運行十來分慢,進自行有效手機管理的方法如下(以華為暢享8e手機為例):
1、打開安卓手機點擊設置--應用程序。
『肆』 Android布局優化的幾種方式
1. include/merge
布局優化中常常用到include/merge標簽,include的含義類似C代碼中的include,意思是直接把指定布局片段包含進當前的布局文件。include適用於多個布局文件中存在相同的xml片段,比如說相同的標題欄、相同的廣告欄、相同的進度欄等等。
2. ViewStub
在一個頁面上根據不同條件展示不同的控制項,我們常常會設置控制項的可視屬性,比如調用指定控制項的setVisibility方法,若需展示則設置View.VISIBLE,若需隱藏則設置View.GONE。不過gone的控制項只是看不到罷了,實際UI渲染時還是會被載入。要想事先不載入,在條件符合時才載入,就得用到標簽ViewStub。
3. style樣式
樣式在res/values/styles.xml中定義,它適用於下面幾種情況:
1、布局文件中存在多個具有相同風格的控制項,比如說統一的文本框TextView,都是白底黑字、中號字體、居中顯示,這時我們便可在styles.xml定義一種文本樣式,然後在各文本框處聲明它的style屬性。好處一個是減少了布局文件的大小,另一個是方便以後統一修改風格。
2、某些控制項在代碼中聲明時需要手工指定style,例如自定義對話框需要在構造函數中指定樣式;另一個例子是彈窗PopupWindow在設置伸縮動畫方法setAnimationStyle時需要指定動畫樣式。
3、定義頁面的主題風格,然後應用到Activity頁面。代碼中設置主題可通過「setTheme(R.style.)」完成,布局中設置可在AndroidManifest.xml的activity節點下添加theme屬性,如「android:theme=」@style/「」。
4. Theme主題
主題是一種特殊的樣式,主題專用於頁面,而樣式一般運用於控制項。主題定義一般放在themes.xml,樣式定義一般放在styles.xml。
Android定義了一些系統主題,完整定義的參見sdk自帶的themes.xml,常用的幾種說明如下:
Theme.NoTitleBar : 不顯示標題欄,即隱藏ActionBar
Theme.Light : 白色背景
Theme.Holo : 淺灰背景
Theme.Black : 黑色背景
Theme.Wallpaper : 壁紙
Theme.Translucent : 透明背景
Theme.Dialog : 對話框
Theme.Panel : 平板
Theme.InputMethod : 輸入法
Theme.SearchBar : 搜索框
『伍』 原生安卓系統怎樣優化會更順暢
加快手機運行速度的方法:
1.結束後台運行程序,或重啟手機。
2.可定期清除專手機上網產生屬的緩存文件。
3.若某些自行下載的軟體長期不使用,建議卸載或禁用。如手機中安裝的軟體較多,會占據手機RAM和存儲空間,導致手機的運行速度有所減慢。
4.擴展內存,可以將手機內存中的多媒體文件移動到外置SD卡中。
5.建議不使用動態壁紙。
6.下載第三方安全管家軟體,一鍵加速清理手機緩存、結束多餘進程(第三方軟體非三星官方軟體,建議您下載市場上評價較高的軟體使用)。註:不要下載需要ROOT的軟體。
『陸』 android 性能優化有哪些辦法
性能優化的常用方法
主要內容包括布局優化,繪制優化,內存泄露優化,相應速度優化,ListView優化,Bitmap優化,線程優化等,下面主要給你舉了其中的幾個例子:
(1)布局優化
布局優化的思想很簡單,就是盡量減少布局文件的層級。
如何進行優化呢?首先刪除布局中無用的控制項和層級,其次有選擇地使用性能較低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,這是因為RelativeLayout比較復雜,他的布局過程花費更多的CPU時間。FrameLayout和LinearLayout一樣都是一種簡單高效的ViewGroup,因此可以考慮使用他們,但是很多時候,單純的通過一個LinearLayout或者FrameLayout無法實現產品的效果,需要通過嵌套的方式來完成,這種情況建議採用RelativeLayout,因為ViewGroup的嵌套就相當於增加了布局的層級,同樣會降低程序的性能。
布局優化的另一種手段是採用<include>標槍,<merge>標簽和ViewStub。<include>標簽主要用於布局重用,<merge>標簽一般和<include>配合使用,它可以減少布局的層級。而ViewStub則提供了按需載入功能,當需要時才將ViewStub中的布局載入到內存,這提高了程序的初始化效率。
(2)繪制方法
繪制優化是指View的onDraw方法避免執行大量的操作,這主要有兩方面。
首先,onDraw中不要創建新的布局對象,這是因為onDraw方法可能會被頻繁調用,這樣就會在一瞬間產生大量的臨時對象,這不僅佔用了過多的內存而且還會導致系統更加頻繁的gc,降低了程序的執行效率。
另一方面,onDraw方法中不要做耗時的任務,也不能執行成千上萬次循環操作,盡管每次循環都很輕量級,但是大量的循環仍然十分搶佔CPU的時間片,這會造成View的繪制過程不流暢。
(3)內存泄露優化
內存泄露在開發過程中是一個需要重視的問題,但是由於內存泄露問題對開發人員的經驗和開發意識要求比較高,因此這是開發人員最容易犯的錯誤之一。內存泄露的優化分為兩個方面,一方面是在開發過程中避免寫出內存泄露的代碼,另一方面通過一些分析工具比如MAT來找出潛在的內存泄露繼而解決。
關於性能優化的建議
1.避免黃健過多對象;
2.不要過多使用枚舉,枚舉佔用的內存空間比整型大一些。
3.常量使用staticfinal來修飾。
4.使用一些Android特有的數據結構,比如SpareArray和Pair等,他們都具有更好的性能。
5.適當使用軟引用和弱引用。
6.採用內存緩存和磁碟緩存
7.盡量採用靜態內部類,這樣可以避免潛在的內部類而導致的內存泄漏。
『柒』 如何對Android客戶端性能優化
為什麼我們的App需要優化,最顯而易見的時刻:用戶say,什麼狗屎,刷這么久都沒反應,取關卸載算了。
這跟什麼有關,我們先蒼白的反駁下,尼瑪用戶設備老舊網又爛,關我屁事,根本不用優化。可是,老闆拍板了,施壓給CTO,然後CTO又來找你:Y的今天必須給我想辦法優化了,不然不準回家。
好吧,為什麼從UI的表象上看,App又卡又慢而且還錯亂。我們試著來剖析下吧。
題外話:把minSDK改到4.0+,去特么的low用戶,連手機都不願意換,還能指望它能給你帶來多少營收么,直接pass掉吧。4.0前的系統bug不少,不能為了彌補這些bug而降低了整體的高性能。
好了,讓我們先從UI說起:
首先要明白的是UI的繪制流程:measure-layout-draw,measure與layout都需要for loop所有的子控制項,匯集起來才能完成繪制,布局。所以子控制項越多,所消耗的時間越長(inflate,layout_weight,relative,多層嵌套等),減少不必要的子控制項或層級,是相當有必要的。你可以通過merge,viewstub這些標簽來減少層級嵌套。如果你的空間觀念沒那麼好,可以用HierarchyViewer工具來檢查。
對於Listview或者GridView這種多item的組件來說,復用item可以減少inflate次數,通過setTag,getTag的ViewHolder方式實現復用,這里要注意的是,holder中的控制項最好reset後再賦值,避免圖片,文字錯亂。
對於ViewPager第一次顯示時卡頓以及左右滑動卡頓,有以下幾種優化方式:
ViewPager同時緩存page數最好為最小值3,如果過多,那麼第一次顯示時,ViewPager所初始化的pager就會很多,這樣pager累積渲染耗時就會增多,看起來就卡。
每個pager應該只在顯示時才載入網路或資料庫(UserVisibleHint=true),最好不要預載入數據,以免造成浪費
圖片顯示不出來或者載入時間太長,怎麼辦?分兩部分,下載速度,載入速度。
對於下載,要控制好同時下載的最大任務數(平均速度慢),同時給InputStream再包一層緩沖流會更快(如BufferedInputStream)。
對於載入速度,我們要知道一點,雖然下載的圖片可能只有幾百K,但是decode成bitmap所佔用的內存可是成倍的,盡可能的減小圖片size是根本因素,讓服務端提供不同解析度的圖片才是最好的解決方案,內存總有耗盡的時刻,別老想著大解析度會更清晰,實際就只有150*150的空間,非給弄張1000*1000的圖片是不恰當的。另外論載入速度:內存>硬碟>網路,合理的使用內存緩存也是關鍵。假如自己寫不好,沒關系,有那麼多開源的圖片緩存框架,不用自己操心。
再說緩存
有很多種緩存方式,也不用Stay列舉了,我們要說的是搭配使用。
比方說,以前我們一直在用強引用,HashMap,後來我們發現占內存,我們就用軟引用,弱引用來及時回收,再後來因為回收機制不可控,所以又有了lrucache,disklrucache通過演算法來平衡內存與硬碟緩存。隨著android版本的推進與演化,我們也應該擁抱變化。如果你的App里還有軟引用,弱引用的地方,不妨再check下。
比方說網路+資料庫。網路我們一般都是去主動獲取,而非被動接受。那如果說數據是重復的或者未更改的呢?那我們去取一次網路數據有什麼意義呢?我的解決方案是給每個activity或fragment或每個組件設置一個最大請求間隔,比如一個listview,第一次請求數據時,保存一份到資料庫,並記下時間戳,當下次重新初始化時,判斷是否超過最大時間間隔(如5分鍾),如果沒有,只載入資料庫數據,不需要再做網路請求。當然,還有一些隱式的http請求框架會緩存伺服器數據,在一定時間內不再請求網路,或者當伺服器返回304時將之前緩存的數據直接返回。
反正也說到網路了,那我們也來說說
現在有很多現成HTTP框架供我們使用,我們幾乎只用寫配置就可以搞定一個url請求,但是這里有很多需要服務端配合的,比如:json數據格式,WebP代替jpg,支持斷點續傳,多個請求合並成一個,盡量不做重定向,伺服器緩存以及負載均衡等。
對客戶端本身,除了上述的實現,我們還需要合理的緩存,控制最大請求並發量,及時取消已失效的請求,過濾重復請求,timeout時間設置,請求優先順序設置等。
優化可不是一個人的事,實現一個功能簡單,但是想優化重構,那是很不容易的事。需要多方面的預判與聯調。合理的假設與實踐是優化最重要的手段。
說完這些具體的點,我們再來說說一些常識,或者稱之為代碼規范。
你要知道for loop中不要聲明臨時變數,不到萬不得已不要在裡面寫try catch。
明白垃圾回收機制,避免頻繁GC,內存泄漏,OOM(有機會專門說)
合理使用數據類型,比如StringBuilder代替String,(筆試題最常見的是str+="str"中有幾個對象) ,少用枚舉enum,少用父類聲明(List,Map)
如果你有頻繁的new線程,那最好通過線程池去execute它們,減少線程創建開銷。
你要知道單例的好處,並正確的使用它。
多用常量,少用顯式的"action_key",並維護一個常量類,別重復聲明這些常量。
如果可以,至少要弄懂設計模式中的策略模式,組合模式,裝飾模式,工廠模式,觀察者模式,這些能幫助你合理的解耦,即使需求頻繁變更,你也不用害怕牽一發而動全身。需求變更不可怕,可怕的是沒有在寫代碼之前做合理的設計。
當然還有很多很多,Stay所說的也只是一個大的輪廓,還是需要自己不斷的嘗試。會開發寫代碼跟會做產品的區別還是蠻大的,僅僅是態度就能刷死80%的碼農了。當你碰到一些需要優化的地方,耐心的去分析,時間的累積會讓你成為真正的工程師。
另外優化也沒有絕對的完美,每一次優化都是基於當前的環境來做的,要明白溝通是最好的優化,不盲從,不隨便,三思而後行。
Android上如何做性能優化的?大概寫三年代碼就能差不多知道了。
『捌』 幾個簡單的設置,提升安卓手機流暢度
如果是三星手機,硬體無法進行更改,可以通過軟體方式對手機進行優化,加快手機的運行速度,加快手機運行速度的方法:
1.結束後台運行程序,或重啟手機。
2.可定期清除手機上網產生的緩存文件。
3.若某些自行下載的軟體長期不使用,建議卸載或禁用。如手機中安裝的軟體較多,會占據手機RAM和存儲空間,導致手機的運行速度有所減慢。
4.擴展內存,可以將手機內存中的多媒體文件移動到外置SD卡中。
5.建議不使用動態壁紙。
『玖』 如何優化自己的安卓手機,提高流暢度
你可以試試騰訊手機管家,它有專門的一鍵優化功能,按一下就給你的手機清理垃圾。不過你放心它只會清理你系統中不必要的數據釋放空間,不會刪除你的重要信息。還有記得平時用過手機都用騰訊手機管家關閉一下後台程序,這樣也可以很有效的給你的手機加速。
『拾』 安卓手機用久了之後,有什麼好的優化方法
建議您:
1.點擊屏幕左下角的【最近應用程序】鍵(即屏幕上唯一物版理按鍵左側的觸摸按鍵)-點擊權左下角【圓圈】圖標-點擊應用程序右側的【結束】圖標或【結束全部】關閉後台運行程序。
2.卸載自行安裝的應用程序。
3.清除手機上網緩存:瀏覽器-菜單鍵(右上角三個小點圖標)-設定-隱私和安全-隱私-刪除個人數據。
4.清除已讀取的來電、簡訊等記錄