web-dev-qa-db-ja.com

Androidハードウェアアクセラレーション-使用するかしないか?

Facebook Androidネイティブアプリ:多くの場合、ユーザーが多くの画像を表示する無限のListViewに費やすソーシャルネットワーク)に非常に類似した機能を備えたアプリを開発しています。 、画像ギャラリーなどを入力します。

議論のために、私はすべて正しいことをしていて、スムーズなスクロールを実現するためのベストAndroidプラクティス(必要に応じてビューをリサイクルし、必要に応じて異なるビュータイプを使用し、メモリのみにスケーリングをロードします必要なサイズのビットマップ、ViewHolderデザインパターンを使用したビットマップのキャッシュ、可能であればUIスレッドをブロックしないなど)

私のアプリの他のすべてのものが最良の方法で記述され、ベストプラクティスに従っているとしましょう(議論のために...:->)

私のアプリはその段階ではまったく悪くはありませんが、ハードウェアアクセラレーションを有効にすると、 Android Developers documentationで説明され、約束されているように、はるかに多くのアプリが作成されますスムーズかつ高速。

起こりうるほどUIに悪影響を及ぼさず、 サポートされていない操作 のいずれも実行していないとしましょう。

このテーマに関するGoogleのドキュメントによると、この機能を使用しないことがわかる唯一の理由は(前述した他のすべての理由に加えて)、アプリがより多くのRAMを使用する可能性があるためです。しかし、どのくらいのRAM?もっとたくさん?私のアプリが大量のRAMを消費すると、メモリを解放する必要があるときにOSによって破棄されるのが良い候補になります。

私の質問は基本的に-

  • 私の状況下でこの機能を使用することは「OK」ですか?
  • それを使用することで他にどんな問題が発生する可能性がありますか?

TIA

40
Tal Kanel

使用するか使用しないか

ハードウェアアクセラレーションを使用するのは、画像のスケーリング、回転、平行移動のための複雑なカスタム計算がある場合のみ使用することをお勧めしますが、直線や曲線(およびその他の簡単な操作)の描画には使用しないでください( source )。

共通の移行を計画しており、スケーリング、リサイクル、キャッシュなどをすでに検討している場合、プロジェクトに負担をかけることは意味がありません。また、ハードウェアアクセラレーションをサポートするためにコードの修正に費やした努力は、2013年5月8日現在の市場の36%である3.0未満のバージョンのユーザーには影響しません。

メモリ

メモリ使用量について( この記事 に従って)、Androidハードウェアを含めることにより、アプリケーションは各プロセスのOpenGLドライバーをロードし、約2MBのメモリ使用量を取得し、ブーストします8MBまで。

その他の問題

APIバージョンとは別に、バッテリーの寿命にも影響すると思います。残念ながら、オンラインでさまざまなユースケースのベンチマークを作成することはできません。いくつかのケースでは、複数のGPUコアがあるため、加速を使用するとバッテリーの寿命が延びる可能性があると主張しています。全体として、その効果があまり大きくないことは安全だと思います(またはGoogleがこれを主要なポイントにしたでしょう)。

37
ılǝ

[〜#〜] update [〜#〜]

ターゲットAPIレベルが14以上の場合、ハードウェアアクセラレーションはデフォルトで有効になります


私はあなたの状況ではい、ハードウェアアクセラレーションを使用します。

アプリでリソースを集中的に使用するコントロールを使用していないことがわかると、ハードウェアアクセラレーションを有効にしても問題になりません。あなたが言ったように、アプリはハードウェアアクセラレーションなしで非常にうまく機能しています。

ハードウェアアクセラレーションを有効にすると、AndroidはGPUの使用を開始し、ハードウェアアクセラレーションを有効にするために必要なリソースが増加するため、アプリはより多くのRAMを消費します。


よくある質問はRAMの量は本当に大きくなりますか?

それに対する答えはすべてによって決定されます:

1 。あなたのプログラミング能力、すなわち。リサイクルリストの管理、画像のスケーリングなど。

2 。デバイス

少し前に、本当に高解像度のビットマップを編集するために使用するアプリを書きました。私は同じ問題に遭遇しました。ハードウェアアクセラレーションが有効になっている場合、さまざまなデバイスで OS によって割り当てられるRAMの最大量はデバイスによって異なります。デバイスのRAMが多い場合、OSはアプリにより多くのRAMを割り当てます。そのため、アプリに使用されるRAMの量が一定になることはありません。大型で高価なデバイスは、常により多くのRAMでアプリを実行します。


ハードウェアアクセラレーションを使用すると、他にどのような問題が発生しますか?

ハードウェアアクセラレーションは、一部の2D描画操作で問題を引き起こす可能性があります。これが発生した場合は、 ハードウェアアクセラレーションの投稿Android Developer Docs に記載されているように、アプリの特定のアクティビティに対してのみハードウェアアクセラレーションを有効にできます

ハードウェアアクセラレーションを有効にする最も簡単な方法は、アプリケーション全体でグローバルにオンにすることです。アプリケーションが標準のビューとDrawableのみを使用している場合、グローバルに有効にしても、描画に悪影響はありません。ただし、ハードウェアアクセラレーションはすべての2D描画操作でサポートされているわけではないため、オンにすると、カスタムビューまたは描画呼び出しを使用する一部のアプリケーションに影響する場合があります。通常、問題は不可視の要素、例外、または誤ってレンダリングされたピクセルとして現れます。これを修正するには、Androidを使用すると、次のレベルでハードウェアアクセラレーションを有効または無効にすることができます。アプリケーション、アクティビティ、ウィンドウ、表示

この方法で、アプリのハードウェアアクセラレーションを制限することもできますが、その音により、アプリのほとんどの機能で必要になります。

お役に立てれば

13
Neil