Androidの性能最適化方法


GPUオーバー描画
 •開発者選択型を開き、「コミッションGPU過度描画」を行い、青、緑、ピンク、赤を描きすぎ、描きすぎて順番に深まっていきます。
 •ピンクはできるだけ最適化して、界面はできるだけ青い緑の色を維持します。
 •赤はきっと問題があります。我慢できません。
HurarchyViewを使ってレイアウトの階層を分析します。
 •複数のフルスクリーン背景を削除します。アプリケーションでは見えない背景を削除します。
 •ImageViewを最適化する:まず背景を描き、それに絵を描いた場合、9-patch形式の背景図の中間の引張り部分は透明に設定され、Android 2 Dレンダリングエンジンは9-patch図の透明画素を最適化する。この簡単な修正はアバターの過剰な描画をなくすことができます。
 •Viewの階層構造を短縮します。削除は必須Viewではなく、フレームレートを上げるだけでなく、メモリの消費を低減し、アプリケーションの起動を加速します。
 •TextViewの組み合わせアイコンは、Lineear Layout+TextView+ImageViewの代わりに使用されます。
 •meargeタグを使う
 •RelativeLayoutを使って平坦化したレイアウト
 •特にListView itemレイアウトは、平準化が必要です。
Android Device Monitorの機能を発見することをけちけちしないでください。
 •Start Method Profiling・スレッドごとのメソッド呼び出し状況を観察できます。
 •方法の呼び出し回数、方法毎の実行時間を観察しても良いです。
 •デッドサイクルがあるかどうかが見つかりました。時間のかかる操作ですか?
LeakCanaryを使ってメモリオーバーを発見しました。
 •開発段階では必ずLeakCanaryを統合し、集積しやすいです。
 •Activityページのメモリオーバーフローをタイムリーに発見する方法
 •詳細なメモリオーバーフロー方法のトレースは、異常点の位置決めに便利です。
lintツールを使ってAPKにダイエットを包みます。
OneAPMを使ってApp性能を監視します。
画像の代わりにSVGを使う
 •必要と設計の協力
画像の代わりにxmlを使う
コード規範の制定と遵守
 •コードのスタイルが一致しており、コードの維持、確認、発見に有利です。
以下はAndroidの性能の最適化のいくつかの方法を共有します。
1.ハードスピードを採用して、android manies.xmlにAndroidを追加します。hardwareAccellated="true"でも、これはアンディ3.0でしか使えません。
2.Viewにキャッシュ属性を設定します。setDrawingCacheはtrueです。
3.あなたのレイアウトを最適化します。Android sdkのtoolsディレクトリのlayoutptコマンドにより、あなたのレイアウトが最適化される必要があるかどうかを確認します。
4.動的にViewをロードします。View Stubを使用して、いくつかの不慣れなビューを避けて、長期的に参照を握り締めます。
5.AcitivityのWindowの背景図を空に設定します。get Window()setBackground Drawable(null);Androidのデフォルトの背景は空ですか?
6.レイアウトの最適化層数を採用する。レイアウトを共有するために使用します。
7.Heapのサイズを確認します。
8.TraceViewでトレース関数を確認して呼び出します。的中した最適化。
9.cursorの使用。ただし、Cursorを管理して、毎回Cursorを閉じないように注意してください。Cursorを開くのに時間がかかります。Currsor.requireはcursorをリフレッシュするために使用されます。
10.リングBufferを採用しています。チェーンの長さの上限を設定することができます。ジェスチャーの変化によって、リングバッファーの内容を更新し続けます。
11.SurfaceViewを採用して、サブスレッドでUIを更新し、ジェスチャーの処理と描画を避ける(通常はViewで行う)。
12.JNIを採用して、時間を消費する処理をc/c+層に置いて処理します。
13.ファイルで操作できるものがあります。できるだけファイルで操作してください。ファイルの操作速度はデータベースの操作より10倍ぐらい速いです。
14.怠惰負荷とキャッシュメカニズム。ネットワークにアクセスする時間がかかります。これ以上UIスレッドを作らないように、新しいスレッドを起動します。
15.メッセージ・キャッシュは、handler.obtainMessageによって多重化される前のメッセージである。

16.ファイルIOキャッシュは、キャッシュポリシーを持つ入力ストリームを使用して、BufferedInputStreamをInputStreamの代わりに、BufferedReaderがReaderの代わりに、BufferedReaderがBufferedInputStreamの代わりに、ファイル、ネットワークIOに適用されます。たとえば:
HttpURLConnection=(HttpURLConnection)url.openConnection;BufferedReader input=newBufferedReader(new Input Stream Reader(con.get InputStream);
Strigs;
while((s=input.readline)!null.{
}

17.Layout最適化:抽象的なレイアウトタグ(include、view stub、merge)を使用して、不要なネストとViewノードを除去し、不要なinfalteを減少させ、その他のLayoutの面で長所を調整でき、ついでにレイアウトに関連ツール(hierarchy viewerとlint)に言及する。
18.TextView属性最適化:TextViewのandroid:ellipsize="markee"走馬灯の効果が極端に消耗する性能。
19.arrayListの代わりにhashMapを使用して、時間の複雑度を一桁下げる。