你好: 1.http用gzip壓縮,設置連接超時時間和響應超時時間 http請求按照業務需求,分為是否可以緩存和不可緩存,那么在無網絡的環境中,仍然通過緩存的httpresponse瀏覽部分數據,實現離線閱讀。 2.使用線程池,分為核心線程池和普通線程池,下載圖片等耗時任務放置在普通線程池,避免耗時任務阻塞線程池后,導致所有異步任務都必須等待 3.listview 性能優化 1).異步加載圖片 item中如果包含有webimage,那么最好異步加載 2).快速滑動時不顯示圖片 當快速滑動列表時(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(SCROLL_STATE_IDLE 和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來 3).復用convertView 在getItemView中,判斷convertView是否為空,如果不為空,可復用。如果couvertview中的view需要添加listerner,代碼一定要在if(convertView==null){}之外。 4).BaseAdapter避免內存溢出 如果BaseAdapter的實體類有屬性非常消耗內存,可以將保存到文件;為提高性能,可以進行緩存,并限制緩存大小。 4.盡量避免static成員變量引用資源耗費過多的實例,比如Context 5.異步任務,分為核心任務和普通任務,只有核心任務中出現的系統級錯誤才會報錯,異步任務的ui操作需要判斷原activity是否處于激活狀態 6.保證Cursor 占用的內存被及時的釋放掉,而不是等待GC來處理。并且 Android明顯是傾向于編 程者手動的將Cursor close掉 7.線程也是造成內存泄露的一個重要的源頭。線程產生內存泄露的主要原因在于線程 生命周期的不可控 8.使用WeakReference代替強引用,弱引用可以讓您保持對對象的引用,同時允許GC在必要時釋放對象,回收內存。對于那些創建便宜但耗費大量內存的對象,即希望保持該對象,又要在應用程序需要時使用,同時希望GC必要時回收時,可以考慮使用弱引用。 9.超級大胖子Bitmap及時的銷毀(Activity的onDestroy時將bitmap回收,在被UI組件使用后馬上進行回收會拋 RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap)設置一定的采樣率(有開發者提供的圖片無需進行采樣,對于有用戶上傳或第三方的大小不可控圖片,可進行采樣減少圖片所占的內存),從服務端返回圖片,建議同時反饋圖片的size巧妙的運用軟引用drawable對應resid的資源,bitmap對應其他資源任何類型的圖片,如果獲取不到(例如文件不存在,或者讀取文件時跑OutOfMemory異常),應該有對應的默認圖片(默認圖片放在在apk中,通過resid獲?。?10.Drawable中ui組件需要用到的圖片是apk包自帶的,那么一律用setImageResource或者setBackgroundResource,而不要根據resourceid 注意:get(getResources(), R.drawable.btn_achievement_normal)該方法通過resid轉換為drawable,需要考慮回收的問題,如果drawable是對象私有對象,在對象銷毀前是肯定不會釋放內存的。 11.復用、回收Activity對象臨時的activity及時finish主界面設置為singleTask一般界面設置為singleTop 12.如果ImageView的圖片是來自網絡,進行異步加載 13.應用開發中自定義View的時候,交互部分,千萬不要寫成線程不斷刷新界面顯示,而是根據TouchListener事件主動觸發界面的更新 14.在onResume時設置該界面的電源管理,在onPause時取消設置 15.位置信息獲取用戶的地理位置信息時,在需要獲取數據的時候打開GPS,之后及時關閉掉
創新互聯于2013年創立,先為啟東等服務建站,啟東等地企業,進行企業商務咨詢服務。為啟東企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
筆者在經歷了多個Android開發項目之后,個人積累也從別處學習了很多在Android開發中非常實用的小經驗。下面從中選擇了最實用的16條,分享給大家。
1.TextView中的getTextSize返回值是以像素(px)為單位的,而setTextSize()是以sp為單位的.所以如果直接用返回的值來設置會出錯,解決辦法是用setTextSize()的另外一種形式,可以指定單位:
1
2
3
4
span style="font-size:16px;"setTextSize(int unit, int size)
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels/span
2.在繼承自View時,繪制bitmap時,需要將圖片放到新建的drawable-xdpi中,否則容易出現繪制大小發生改變。
3.在文字中加下劃線: textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG)。
4.scrollView是繼承自frameLayout,所以在使用LayoutParams時需要用frameLayout的。
5.在Android中幾種網絡編程的方式:
(1)針對TCP/IP的Socket、ServerSocket
(2)針對UDP的DatagramSocket、DatagramPackage。這里需要注意的是,考慮到Android設備通常是手持終端,IP都是隨著上網進行分配的。不是固定的。因此開發也是有 一點與普通互聯網應用有所差異的。
(3)針對直接URL的HttpURLConnection
(4)Google 集成了Apache HTTP客戶端,可使用HTTP進行網絡編程。針對HTTP,Google集成了Appache Http core和httpclient 4版本,因此特別注意Android不支持 httpclient 3.x系列,而且目前并不支持Multipart(MIME),需要自行添加httpmime.jar
(5)使用Web Service。Android可以通過開源包如jackson去支持Xmlrpc和Jsonrpc,另外也可以用Ksoap2去實現Webservice
(6) 直接使用WebView視圖組件顯示網頁。基于WebView 進行開發,Google已經提供了一個基于chrome-lite的Web瀏覽器,直接就可以進行上網瀏覽網頁。
6.TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
這個是我們最常用的一個構造方法,
float fromXDelta:這個參數表示動畫開始的點離當前View X坐標上的差值;
float toXDelta, 這個參數表示動畫結束的點離當前View X坐標上的差值;
float fromYDelta, 這個參數表示動畫開始的點離當前View Y坐標上的差值;
float toYDelta)這個參數表示動畫開始的點離當前View Y坐標上的差值;
如果view在A(x,y)點 那么動畫就是從B點(x+fromXDelta, y+fromYDelta)點移動到C 點 (x+toXDelta,y+toYDelta)點。
7.android提供了幾種在其他線程中訪問UI線程的方法
常用的Android性能優化方法:
一、布局優化:
1)盡量減少布局文件的層級。
層級少了,繪制的工作量也就少了,性能自然提高。
2)布局重用 include標簽
3)按需加載:使用ViewStub,它繼承自View,一種輕量級控件,本身不參與任何的布局和繪制過程。他的layout參數里添加一個替換的布局文件,當它通過setVisibility或者inflate方法加載后,它就會被內部布局替換掉。
二、繪制優化:
基于onDraw會被調用多次,該方法內要避免兩類操作:
1)創建新的局部對象,導致大量垃圾對象的產生,從而導致頻繁的gc,降低程序的執行效率。
2)不要做耗時操作,搶CPU時間片,造成繪制很卡不流暢。
三、內存泄漏優化:
1)靜態變量導致內存泄漏 ? 比較明顯
2)單例模式導致的內存泄漏?單例無法被垃圾回收,它持有的任何對象的引用都會導致該對象不會被gc。
3)屬性動畫導致內存泄漏 ?無限循環動畫,在activity中播放,但是onDestroy時沒有停止的話,動畫會一直播放下去,view被動畫持有,activity又被view持有,導致activity無法被回收。
四、響應速度優化:
1)避免在主線程做耗時操作 包括四大組件,因為四大組件都是運行在主線程的。
2)把一些創建大量對象等的初始化工作放在頁面回到前臺之后,而不應該放到創建的時候。
五、ListView的優化:
1)使用convertView,走listView子View回收的一套:RecycleBin 機制
主要是維護了兩個數組,一個是mActiveViews,當前可見的view,一個是mScrapViews,當前不可見的view。當觸摸ListView并向上滑動時,ListView上部的一些OnScreen的View位置上移,并移除了ListView的屏幕范圍,此時這些OnScreen的View就變得不可見了,不可見的View叫做OffScreen的View,即這些View已經不在屏幕可見范圍內了,也可以叫做ScrapView,Scrap表示廢棄的意思,ScrapView的意思是這些OffScreen的View不再處于可以交互的Active狀態了。ListView會把那些ScrapView(即OffScreen的View)刪除,這樣就不用繪制這些本來就不可見的View了,同時,ListView會把這些刪除的ScrapView放入到RecycleBin中存起來,就像把暫時無用的資源放到回收站一樣。
當ListView的底部需要顯示新的View的時候,會從RecycleBin中取出一個ScrapView,將其作為convertView參數傳遞給Adapter的getView方法,從而達到View復用的目的,這樣就不必在Adapter的getView方法中執行LayoutInflater.inflate()方法了。
RecycleBin中有兩個重要的View數組,分別是mActiveViews和mScrapViews。這兩個數組中所存儲的View都是用來復用的,只不過mActiveViews中存儲的是OnScreen的View,這些View很有可能被直接復用;而mScrapViews中存儲的是OffScreen的View,這些View主要是用來間接復用的。
2)使用ViewHolder避免重復地findViewById
3)快速滑動不適合做大量異步任務,結合滑動監聽,等滑動結束之后加載當前顯示在屏幕范圍的內容。
4)getView中避免做耗時操作,主要針對圖片:ImageLoader來處理(原理:三級緩存)
5)對于一個列表,如果刷新數據只是某一個item的數據,可以使用局部刷新,在列表數據量比較大的情況下,節省不少性能開銷。
六、Bitmap優化:
1)減少內存開支:圖片過大,超過控件需要的大小的情況下,不要直接加載原圖,而是對圖片進行尺寸壓縮,方式是BitmapFactroy.Options 采樣,inSampleSize 轉成需要的尺寸的圖片。
2)減少流量開銷:對圖片進行質量壓縮,再上傳服務器。圖片有三種存在形式:硬盤上時是file,網絡傳輸時是stream,內存中是stream或bitmap,所謂的質量壓縮,它其實只能實現對file的影響,你可以把一個file轉成bitmap再轉成file,或者直接將一個bitmap轉成file時,這個最終的file是被壓縮過的,但是中間的bitmap并沒有被壓縮。bitmap.compress(Bitmap.CompressFormat.PNG,100,bos);
七、線程優化:
使用線程池。為什么要用線程池?
1、從“為每個任務分配一個線程”轉換到“在線程池中執行任務”
2、通過重用現有的線程而不是創建新線程,可以處理多個請求在創建銷毀過程中產生的巨大開銷
3、當使用線程池時,在請求到來時間 ,不用等待系統重新創建新的線程,而是直接復用線程池中的線程,這樣可以提高響應性。
4、通過和適當調整線程池的大小 ,可以創建足夠多的線程以使處理器能夠保持忙碌狀態,同時還可以防止過多線程相互競爭資源而使應用程序耗盡內存或者失敗。
5、一個App里面所有的任務都放在線程池中執行后,可以統一管理 ,當應用退出時,可以把程序中所有的線程統一關閉,避免了內存和CPU的消耗。
6、如果這個任務是一個循環調度任務,你則必須在這個界面onDetach方法把這個任務給cancel掉,如果是一個普通任務則可cancel,可不cancel,但是最好cancel
7、整個APP的總開關會在應用退出的時間把整個線程池全部關閉。
八、一些性能優化建議:
1)避免創建過多對象,造成頻繁的gc
2)不要過多使用枚舉,枚舉占用的空間比整型大很多
3)字符串的拼接使用StringBuffer、StringBuilder來替代直接使用String,因為使用String會創建多個String對象,參考第一條。
4)適當使用軟引用,(弱引用就不太推薦了)
5)使用內存緩存和磁盤緩存。
大致有6種方法
1.使用Android智能手機的語音到文本功能運行了Android 2.1或更高版本操作系統的手機都內置了一個語音識別系統,可以讓用戶通過語音來打字。在使用語音到文本功能時,用戶只需點擊屏幕鍵盤左下角的麥克風按鍵,或者從左至右輕掃整個鍵盤即可。上述任何一種操作方式都會彈出“現在請講話(Speak Now)”的對話框。一旦這個對話框彈出,用戶就可以開始說話了,系統會自動將用戶所說的話變成文字。在其他任何地方,用戶也可以使用語音到文本功能來操作Android手機。比如,用它來搜索設備:點選麥克風圖標旁邊的搜索框或長按搜索按鈕,說出你要查詢的內容,系統就能自行搜索了。Android的語音到文本系統還具有幾個隱藏的命令,這些命令可以幫助用戶發送短信。2.使用Vlingo應用程序進行語音解析如果用戶想體驗更強大的語音輸入功能,那么Vlingo將是最佳選擇,這款應用程序在Android商店上可以免費獲得。Vlingo對Android自帶的語音到文本功能進行了升級,使得用戶可以用各種語音命令來操作手機。例如,單擊手機觸屏,用戶就可以直接給任何個人或企業打電話,不管他們在不在你的聯系人名單里(如果需要的話,可以將Vlingo當作一個自動查號臺)。用戶也可以編寫并發送短信、電子郵件和微博消息,還可以搜索網絡、獲知方向、打開其它Android應用程序,所有這些任務只需用戶說幾句話就可以進行操作。為了使用Vlingo,用戶可以點擊主菜單上圖標,也可以按手機上的搜索鍵,程序會自動轉入語音輸入功能。3.使用Google推出的“語音行動”應用程序就在幾天前,谷歌緊隨Vlingo的步伐,為Android手機推出了自己的語音控制應用程序——語音行動(Voice Actions),其功能非常強大。不過,該應用程序僅能運行在Android 2.2手機上。和Vlingo一樣,語音行動是和手機的搜索鍵結合在一起的。按住搜索鍵,就可以通過該應用程序的語音命令對手機進行操作,也不需要再連接其他額外的硬件。語音行動和Vlingo具有一些相同的命令。但是,語音行動也有一些其他應用程序所不具有的特殊命令。語音行動可免費下載,但除了全新的摩托羅拉Droid 2手機之外,都必需手動進行安裝。只要用戶的手機運行的是Android 2.2系統,就能在Android商店上搜索到語音行動。4.使用掃屏輸入法Swype如果用戶不喜歡用語音操作手機的方式,在Android手機上仍然有許多高級的輸入法可供選擇。當下最流行的是掃屏輸入法Swype——一款第三方應用軟件,它可以取代Android內置的虛擬標準鍵盤。Swype輸入法只需用戶在要錄入單詞的幾個字母之間滑行,無需敲擊鍵盤。該應用程序的發明者聲稱,用戶使用該系統打字的速度比用標準摸屏鍵盤快了20%到30%?,F在,幾款Android手機(包括Droid X和Droid 2手機)都預裝了Swype輸入法。那些手機上未預裝該應用程序的用戶,也可以獲得限量的免費試用版。只需在Swype的網站上注冊,您的名字就會出現在等候批準的申請人名單上。5.預測輸入法SwiftKey接下來,我們要介紹的Android輸入法有點接近超能感應了。SwiftKey,是目前許多人首選的一款輸入法,它可以預測出用戶即將輸入的單詞。下面是SwiftKey輸入法的工作流程:SwiftKey輸入法可以跟蹤鍵入內容,并彈出預測的下一個單詞。選擇系統預測出的單詞時,點擊該單詞或按空格鍵即可。這款應用程序的發明者聲稱,SwiftKey只用其他輸入法80%的時間就能準確預測出用戶下一個要輸入單詞的一至兩個字符。甚至在用戶打出下一個單詞的首個字母之前,SwiftKey就能用其它輸入法三分之一的時間根據上下文準確預測出整個單詞。目前,SwiftKey輸入法可以在Android商店上免費下載。6.盲打輸入法BlindType如果你仍為不能在智能手機上準確點擊觸屏按鍵而苦惱,那么最后為你介紹的這款Android輸入法正好可以滿足你的需求。正如其字面意思,BlindType是一種可以在觸屏手機上實現盲打的輸入法。該應用程序的口號是:“無需準確的敲擊鍵盤”。BlindType輸入法可以調整至用戶“心目中”的鍵盤,并對用戶輸入的內容進行預測和更正,即便是用戶點錯了鍵盤也沒關系。這聽起來很奇怪吧?去看看此款輸入法的操作視頻,你會有更為深刻的了解。BlindType輸入法的發明者期望,在“不久的將來”Android手機可以運行該輸入法,所以現在你不必著急,耐心的等待這個精確輸入法的到來吧!
為什么安卓手機充電效率比蘋果手機快很多?
而且不管是蘋果手機還是安卓手機,標準充電器部分都是通用USB接口,兩種充電器混用也不會有問題??斐浼夹g興起后,很多智能手機為了達到快充的效果,都加強了電壓或電流。而正規的手機充電器是根據手機內部安裝的芯片來輸出電壓/電流的,也就是說,手機需要多少功率,充電器就會輸出多少功率。大功率手機充電器不會傷害手機。一些手機廠商為了兼顧不支持快充的手機,專門為充電器設計了兩種不同的功率。比如華為手機原裝的快充有5V/2A和9V/2A兩種,在給不支持快充的手機充電時使用的電量更低。此外,OPPO的VOOC閃充會根據被充電手機的接口引腳自動判斷是否支持快充,如果不支持則只輸出低電量。所以用安卓快充給蘋果iPhone充電不會有問題。不過,雖然大部分智能手機都可以混用充電器,但是有一種情況需要避免,那就是長時間使用低功率的充電器給支持快充的手機充電。比如手機可以用9V/2A功率充電,而你只用5V/1A的小功率充電器,充電器會一直處于飽和工作狀態,導致自身溫度升高,時間長了還是有一定風險的。再者,最好不要使用來歷不明的充電器。一般正規手機的標準充電器都不便宜。蘋果iPhone 6S原裝充電器149元,華為快充也要69元。雖然小充電器這么貴,有一定溢價因素,但是原裝充電器用料足,質量有保證。而一些沒有品牌的充電器往往連正規的合格證都沒有,內部元件也是用最便宜的下腳料做的。長期使用不僅會損壞手機電池,還會有自燃、漏電甚至爆炸的危險。如果你需要購買非原廠的充電器,一定要從正規渠道購買,比如像JD.COM、Suning.cn這樣的正規網商。另外,購買的第三方充電器一定要有正規的國家3C認證標志:誤區二:第一次使用手機,應該總是沒電,自動關機后再充電12小時以上。因為現在大部分智能手機都不能換電池,而且大家都很在意電池壽命,所以很多用戶會自動關機直到沒電,然后充電12個小時以上,防止新手機的電池產生“記憶效應”,所謂“記憶效應”是指過去的鎳鎘電池用光電充滿后不會充滿,下次再充滿的情況。但是現在的智能手機都是使用固態鋰聚合物電池,沒有所謂的記憶效應。他們反而最怕沒電的情況。鋰聚合物電池比較嬌氣,不僅怕熱,還怕冷。比如iPhone在寒冷的天氣下很多次都無法開機,因為蘋果設計了一個溫度開關來保護電池,一旦檢測到環境溫度過低或過高就會自動關閉。同時,固態鋰聚合物電池一旦電量耗盡,內部鋰離子活性會大大降低,對電池造成極大的損害。智能手機的電量最好始終保持在20%以上,盡量不要等到降到5%以下再充電。一旦智能手機電量耗盡,手機會自動關機。這時候給手機充電也可能遇到沒反應的情況。這種情況不要慌,繼續給手機充電就好。一般5到10分鐘后手機會再次顯示充電進度。誤區三:充電的時候玩手機沒問題。以前一般認為邊充電邊玩手機問題不大,因為那時候快充技術還沒興起,用充電器給手機充電時功率低,手機耗電比較低。充電時玩手機最多只會導致充電時間更長。但近兩年,高通、聯發科、三星、華為都提出了快充技術,提高了充電器的功率,將手機充電時間縮短到100分鐘以內。這雖然提高了手機的充電效率,但也帶來了一個問題:手機在快速充電時會明顯發熱。上一個問題提到了,智能手機電池對溫度很敏感,過冷或過熱都是不行的。因此,在快速充電時,智能手機的溫度會升高。如果這個時候玩游戲什么的,身體的溫度會進一步升高。手機溫度一旦超過40攝氏度,就會對電池產生一定的影響。所以手機快充狀態下最好不要玩。如果一定要用手機,就不要玩游戲或打開太耗費資源的應用,以免體溫過高。誤區四:用快充會傷電池。如前所述,目前的快充技術在充電時會導致手機溫度升高,因此部分用戶擔心快充會損壞電池,故意選擇功率較低的充電器代替原來的快充充電器,實現“慢充”。其實這種擔心完全沒有必要。無論是高通的QC快充還是OPPO的VOOC閃充,在推出之前都經過了無數次的測試,手機內置的IC電源管理芯片也會根據電池的充電情況來調節輸入電流。比如現在的智能手機,前80%快充,后20%慢充,這是一種科學的快充方式。只要控制好電流強度,就不會對手機電池造成損害??偨Y智能手機的充電技術在不斷發展,所以我們的充電習慣也在不斷變化。不過給手機充電只要記住一點就不會有大問題:無論是原裝的還是非原裝的手機充電器,一定要選擇正規廠家的合格產品,通過質量認證。千萬不要用來歷不明的充電器給手機充電。
文章名稱:android效率,android系統耗電快
文章網址:http://m.newbst.com/article38/phhipp.html
成都網站建設公司_創新互聯,為您提供自適應網站、關鍵詞優化、用戶體驗、網站營銷、搜索引擎優化、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯