Android システムパフォーマンス最適化の概要

目次

導入:

アプリの最適化:

ネットワークの最適化:

メモリの最適化:

Caton の最適化:


導入:

まず、Android のパフォーマンス最適化について簡単に分類して整理します。パフォーマンスに影響を与える多くの要因により、たとえば、この記事で分類されているアプリ、メモリ、ネットワーク、フリーズはすべて相互に影響します。Caton は、ユーザーにとって最も直感的で目に見えるパフォーマンスの問題である必要があります。

APP の最適化は、起動、UI 描画、リソースの最適化の 3 つの側面に焦点を当てます。

メモリの最適化では、メモリ ジッター、メモリ リーク、メモリ拡張の考慮事項に焦点を当てます。

ネットワークリクエストとデータ圧縮の側面からネットワークの最適化を検討

上記の 3 つの側面を最適化することは、システム フリーズの問題の解決に役立ちます。先ほどのフリーズはユーザーが直感的に認識するものですが、表示の観点から見ると、フリーズの問題はコマ落ちによって引き起こされます。この記事では、当面は表示リフレッシュの原理について詳しく説明しません。


アプリの最適化:

    UI の最適化 (レイアウトの最適化、描画の最適化)
        レイアウトの最適化: RelativeLayout が、デフォルトのルート レイアウトとして LinearLayout を置き換えます。ネストされたレイアウトを減らし、レンダリング効率を向上させます。
        <include> タグ
        <ViewStub> タグは、一般的ではないレイアウトを読み込み、読み込みを遅延し
        ます。 <merge> タグは、レイアウトのネスト レベルを減らします。
    インストール パッケージの最適化 (解像度リソース ファイルの最適化)
        ボリュームを削減します。
        解像度リソースの最適化
        コード 最適化:
        ライブラリ リソースの最適化:
        アセット リソースの最適化
        コード難読化圧縮、最適化、難読化、     その他の         機能
        を含む proGuard コード難読化ツールを使用します。

        コールド スタート、ホット スタート、時間のかかるスレッドはサブスレッドを使用して実行します

        起動ロジック、読み込みロジック、
        必須でないオブジェクトは遅延初期化可能、
        グローバル静的オブジェクトは作成せず、シングルトン モードに切り替えて、アプリケーション プロセスを初回のみ初期化する必要があるようにする、
        依存関係注入フレームワークを検討する
        

ネットワークの最適化:

    ネットワーク リクエストのマージ、ネットワーク リクエストの削減、
    DNS 分析の回避、
    大量のデータの読み込み、ページングされた
    ネットワーク データの使用、GZIP 圧縮を使用し
    たネットワーク データ キャッシュの追加、画像アップロードのためのネットワークへの頻繁なリクエストの回避、
    必要に応じて画像の圧縮
    

メモリの最適化:

    メモリ リークを避ける: 存続期間の長いオブジェクトは、存続期間の短いオブジェクトを指します。ヒープに割り当てられたオブジェクトは使用されなくなりましたが、GC コレクターはそれらを再利用できません。
    静的変数の問題: 内部クラスを静的内部クラスとして設定するか、context.applicationContext() をシングルトン モードとして独立して使用します
    : context.getApplicationconText() プロパティにパラメーターを渡します。アニメーション
    : Activity.onDestroy は、Animation.cancel() を呼び出します。
    ハンドラー: static を使用します。内部クラス +WeakReference 弱参照; 内部クラスがライフ サイクルを終了するときにメッセージ キューをクリアする スレッドの
    問題: AsyncTask と Runnable を静的内部クラスとして設定するか、それらを分離し、スレッド内で弱参照を使用して保存します コンテキスト参照
    リソースが閉じられていません:アクティビティが破棄されたときに閉じられた場合でも、またはログアウトします:
        BroadcastReceiver は unregisterReceiver() を呼び出します
        。 カーソル、ストリーム、ファイル: close
    アダプターを呼び出します
        。 問題: キャッシュを使用せずにアイテムを毎回再インスタンス化し、getView() のみに依存します。 GCの圧迫ConvertViewを使用する     アダプタ:webView
        構築時の     :マップなどに静的参照があり、削除操作が行われない


    メモリの拡張: マニフェスト ファイルのアプリケーションにlargeHeap="true" 属性を追加します。同じアプリケーションが複数のプロセスの実行を開始し、アプリケーションの合計メモリ容量を増やすことができます。        


Caton の最適化:

    メイン スレッドでネットワーク アクセスや大きなファイル IO 操作を実行しないでください。
    レイアウトを最適化し
    、描画を最適化します
        。onDraw で不必要な再描画や過剰描画を回避します。 新しいローカル オブジェクトを作成しないでください。
        onDraw メソッドでは時間のかかる操作を行わないでください。
 


 

おすすめ

転載: blog.csdn.net/haigand/article/details/132506650