Android アプリのパフォーマンスを最適化するためのトップ 10 のヒント

巴扎黑
リリース: 2016-11-11 13:31:03
オリジナル
1079 人が閲覧しました

ハンマーやナス型携帯電話の継続的な出現に関係なく、Android システムの携帯電話市場シェアは現在最大であるため、Android に基づいて開発されたアプリの数も非常に多くなります。では、どうすればより高性能な Android アプリを開発できるのでしょうか?これはソフトウェア開発会社やプログラマーにとって大きな悩みの種だと思います。今回は、Android アプリのパフォーマンスを向上させるためのヒントをいくつか紹介します。

スレッドを効率的に使用する

1. バックグラウンドの一部のスレッドでアクションをキャンセルします

デフォルトでは、アプリの実行中のすべての操作がメインスレッド (UI スレッド) で実行されることがわかっているため、アプリの応答速度は低下します。影響を受けることになります。プログラムがフリーズしたり、停止したり、システムエラーを引き起こしたりする可能性があります。応答時間を短縮するには、時間のかかる操作 (ネットワーク リクエスト、データベース操作、複雑な計算など) をメイン スレッドから別のスレッドに移動する必要があります。最も効率的な方法は、この操作をクラス レベルで完了することです。AsyncTask または IntentService を使用してバックグラウンド操作を作成できます。 IntentService の使用を選択した場合、IntentService は必要に応じて開始され、ワー​​カー スレッドを通じてリクエスト (Intent) を処理します。

IntentService を使用する場合は、次の制限に注意する必要があります:

1. このクラスは UI に情報を渡しません。処理結果の情報をユーザーに表示したい場合は、Activity を使用してください。一度に処理できるリクエストは 1 つだけです。

3. 各リクエスト処理プロセスは中断できません。

2. ANR を使用せずに応答を保持します。

この方法では、システムが中断されるのを防ぐこともできます。ユーザー操作で応答中 (ANR) ダイアログ ボックスが表示されなくなります。必要なのは、AsyncTask を継承してバックグラウンド ワーカー スレッドを作成し、doInBackground() メソッドを実装することだけです。

もう 1 つの方法は、Thread クラスまたは HandlerThread クラスを自分で作成することです。スレッドの優先順位を明示的に設定しない限り、デフォルトのスレッド優先順位はメインスレッドの優先順位と同じになるため、これによりアプリの速度も低下することに注意してください。

3. スレッドでクエリ操作を初期化します。

クエリ操作がバックグラウンドで処理されている場合、表示されるデータは即時ではありませんが、CursorLoader オブジェクトを使用してプロセスを高速化できます。アクティビティとユーザーの間の影響は影響を受けません。

このオブジェクトを使用した後、アプリは ContentProvider がクエリするための独立したバックグラウンド スレッドを初期化し、クエリが完了すると、クエリを呼び出したアクティビティに結果が返されます。

4. 注意が必要なその他の側面

UI スレッドで時間がかかる可能性のある操作を確認するには、Safe.ijiami、Systrace、Traceview などの特別なツールを使用します

進行状況バーを使用して操作の進行状況をユーザーに表示します。

初期化操作に時間がかかる場合は、ようこそインターフェイスを表示してください。

デバイスのバッテリー寿命を最適化します

バッテリーを消費した場合、アプリをアンインストールしたユーザーを責めないでください。バッテリーの使用量に関して、主な消費電力は次のとおりです:

データを更新するときにプログラムを頻繁に起動します。

データを転送するために EDGE または 3G を使用します。

テキスト データを変換し、非 JIT 正規表現操作を実行します。

5. ネットワークを最適化します

ネットワーク接続がない場合は、ネットワーク接続があり、ローミングがない場合にのみデータを更新します。

互換性のあるデータ形式を選択し、すべてのデータを変換します。バイナリ データ リクエストはバイナリ データ形式リクエストに変換されます。

効率的な変換ツールを使用し、ツリー型変換ツールの使用を検討してください。

より高速なユーザー エクスペリエンスを実現するには、サーバーへの繰り返しのアクセスを減らしてください。

可能であれば、フレームワークの GZIP ライブラリを使用してテキスト データを圧縮し、CPU リソースを効率的に使用します。

6. アプリケーションのフロントエンド作業を最適化します

ウェイクロックの使用を検討する場合は、最小レベルに設定してください。

潜在的なバグによるバッテリー消費を防ぐために、タイムアウトを明確に指定してください。 :keepScreenOn 属性;

システム GC 操作に加えて、XmlPullParserFactory や BitmapFactory などの Java オブジェクトを手動でリサイクルすることを検討してください。正規表現 Matcher.reset(newString) 操作と StringBuilder.setLength(0) 操作もあります。

メインスレッドでは安全ですが、同期の問題に注意してください。

Listview でより多くの再利用戦略を使用してください。許可されています。GPS の代わりに大まかなネットワーク測位を使用します。比較すると、GPS には 1mAh (25 秒 * 140 mA) が必要ですが、一般的なネットワークでは 0.1 mAh (2 秒 * 180 mA) しか使用されません。

GPS 位置更新操作から必ずログアウトしてください。なぜなら、この更新操作は onPause() でも継続されるからです。すべてのアプリケーションがこの操作からログアウトすると、ユーザーはバッテリーを無駄にせずにシステム設定で GPS を再度有効にすることができます

DisplayMetrics で DPI タスクを実行する場合は、低精度の変数を使用したり、変数値をキャッシュしたりすることを検討してください。

7. フォアグラウンドで動作するアプリケーションを最適化します

各プロセスには 2MB のメモリが必要であり、メモリが必要になるとフォアグラウンド プログラムが再起動されるため、サービスのライフサイクルが短くなるようにしてください。

メモリ使用量を維持しないでください。大きすぎます

アプリを 30 分ごとに更新したい場合は、デバイスが起動している間に実行してください。

サービスがプル状態またはスリープ状態になるのは良くありません。そのため、サービスの終了時に AlarmManager または構成プロパティ stopSelf() を使用する必要があります。

8. その他の注意事項

全体的なアップデートを実行する前にバッテリーの状態とネットワークの状態を確認し、大規模な交換操作を実行する前に最適な状態になるまで待ちます。

アップデートサイクルなどの電力使用量をユーザーに確認させます。バックグラウンド 動作中;

メモリ使用量の少ない UI を実装する

9. レイアウト表示の問題を見つける

レイアウト用に UI を個別に作成すると、メモリを乱用するアプリを作成することになり、 UI。スムーズで低メモリの UI を実現するための最初のステップは、アプリケーションでボトルネックとなる可能性のあるレイアウトを検索することです。 Safe.ijiami と、Android SDK/tools/ に付属する Hierarchy Viewer Tool ツールを使用します。

もう 1 つの優れたツールは Lint です。これは、アプリケーションのソース コードをスキャンして潜在的なバグを見つけ、制御結果を最適化します。

10. 問題を解決する

レイアウトの表示結果に問題が見つかった場合は、レイアウト構造を簡素化することを検討できます。 LinearLayout タイプを RelativeLayout タイプに変換して、レイアウト階層を減らすことができます。

上記の各ヒントについて、毎日のコードの一部として取り入れていただければ、予期せぬ結果が得られることを願っています。 Google Play で、より優れた、スムーズ、高速、省電力のアプリケーションを公開し、Android の完璧さという目標に一歩近づきましょう。


関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート