チームメンバーと一緒に、モバイルでフィールド上のデータを収集する1つのAndroidアプリケーションを開発します。
現在、このアプリケーションは本番環境に移行しています。したがって、一般の人々はこのアプリケーションを使用します。また、私のAndroidアプリケーションで紹介するすべてのことと、このアプリケーションをエラーなしで実行するための最小ハードウェア要件を説明する1つのドキュメントを作成する必要があります。
これで、ハードウェアの最小要件をどのように知ることができますか。
基本的に、私のアプリケーションでは、約4つのTextField
、3つのSpinner
、Date
、EditText
、および2つのImageView
です。
それで、このアプリケーションを実行するための最小メモリ要件をどのように知るか。
私は、ほとんどすべてのメモリが他のアプリケーションによって使用されているモバイルの1つでこのアプリケーションを試しました。そこに私のアプリケーションは写真をキャプチャすることができません。そして、いくつかのアプリケーションを削除すると、アプリケーションは正常に機能します。
そのため、アプリケーションを実行するための最小メモリ要件を知りたいのです。
最小要件は、以下の点によって異なり、ほとんどの場合、テストと文書化が含まれます。
APIレベル:最小Androidバージョンがサポートされており、ほとんどが開発者に知られています。API間で多くの大きな変更がありました。 Androidでは、v4とv7をサポートします。compatライブラリは大いに役立ちますが、すべての側面を網羅しているわけではありません。
デバイス機能:アプリが使用するすべての機能を書き留めます。 (タッチスクリーン、カメラ、加速度計、ネットワーク接続などがあります)。幸い、アプリマニフェストでそれを宣言できます(uses-feature
)およびPlayストアはサポートされていないデバイスを除外します。
[〜#〜] ram [〜#〜]:使用 [〜#〜] ddms [〜#〜] / Android Studio エミュレーターと実際のデバイスで、リアルタイムのメモリ使用量を確認します。アプリのさまざまな機能をトリガーして、使用できるRAMをできるだけ多く使用して、長時間実行し続けてください。その最小使用量と最大使用量を見積もりとして使用します。 TraceViewなどのDDMSツールを使用すると、ヒープ、スレッドでのオブジェクトの割り当てを確認したり、メソッドのプロファイリングを実行したりすることもできます。 Monkey Tool を長時間実行して、アプリにストレスを与えます。
CPU速度:[〜#〜] if [〜#〜]アプリは集中的なコンピューティング、データ変換などを行います。そのようなコンピューティングコードでタイムスタンプログをプログラムすることをお勧めします。コンピューティングを実行する必要があるものはすべて、デバイスの遅延を大きくすることなく、十分な時間で完了するようにCPU速度を設定してください。ビジュアルレンダリングの場合も、(ゲーム)良好なフレームレートが主な要因です。この場合、フレームレートについて実際のデバイスのベンチマークを行い、ハイエンドのチップセットを選択できます。マルチコアデバイスのユーザーを推奨することもできます。
CPU/GPUの互換性:もう1つの重要な詳細は、アプリにC/C++コードがある場合、そのコードが一部のCPUタイプ(MIPS)で実行されない可能性があることです。 、ARMまたはx86)。OpenGLESバージョンと利用可能な拡張機能を使用するアプリについても同じことが言えます。デバイスには異なるCPU /グラフィックチップセットがあります。
ディスク:インストール後のアプリのサイズを見積もります。アプリの最小ディスク要件は、アプリ自体を保存するために必要なスペースであることに注意してください。少なくとも起動でき、キャッシュ、データベース、または使用時に作成するユーザーコンテンツは含まれません。
表示サイズ:レスポンシブで柔軟なUIが常に推奨されますが、アプリは特定の画面サイズでのみ使用できる場合があります。したがって、互換性のある画面サイズを考慮に入れることができます。
制御できないもの:otherAppsユーザーが実行する可能性のあるものを制御できないことを忘れないでください。したがって、アプリがデバイスにこれだけの無料RAMを必要とすることを宣言し、最良のシナリオを想定して、デバイスに少なくともその量のRAMがインストールされていることを宣言するのは安全です。たとえば、アプリが最大になると200 mbかかるため、要件は512MB以上のデバイスのみであると述べました。また、SDカードユーザーのサイズを制御することはできないため、アプリは、ディスクがいっぱいになると機能できないことをユーザーにすぐに通知する必要があります。
最後に、優れたテストは、見積もりを実際のベンチマークに変えるものです。また、見積もりのみではなく、ベンチマークに基づいて要件を設定することをお勧めします。
[〜#〜]更新[〜#〜]:
AndroidによるAPIまたはクラスはありますか?これは、アプリケーションで使用しているフィールドの使用方法と携帯電話で取得している権限に応じて、最小メモリ要件を示します。
APIはランタイムを正確に予測できません。コードには多くのif
とelse
があり、さらにユーザー入力があるため、オブジェクトの作成と実行がどの正確なパスをたどるかを予測することはできません。 DDMSなどのツールを使用して外部でのみランタイムを監視できます。
Appleとは異なり、Androidはオープンシステムであり、メーカーが自由に選択できるデバイスハードウェアの可能性は非常に大きいです。それに加えて、デバイスのROMで行うカスタマイズもあります。一般的なAPIはありません。これらすべてを追跡します。Android APIと標準仕様に固執し、非表示のAPIなどの使用を避けます。
あなたが自分自身に尋ねるべき質問
1。私のメモリ要件は何ですか?データを処理するために大量のメモリが必要ですか(物理的ではなく、ヒープ内にあります)、それとも最小限ですか?現在、ほとんどのデバイスには64 MBのヒープサイズが付属していますが、これはメーカーによって異なります。同じAPIレベルでも異なります。最小値を見つけて、その量のヒープメモリが使用可能であることを確認してください。
実行時に消費しているメモリを監視するには、チェック this
現在のデバイスで使用可能なヒープメモリの量を確認するには、 this および this を確認します。
Androidはウィンドウとは異なり、すべてのアプリは同じ量のヒープメモリで起動し、そのデバイス上のすべてのアプリで一定であることを忘れないでください。つまり、アプリはこの利用可能なメモリを超えて拡張することはできません。マニフェストAndroid:largeHeap="true"
でこのタグを使用して追加のメモリを要求できますが、この機能は3.0以前のOSバージョンでは使用できません。
私は、ほとんどすべてのメモリが他のアプリケーションによって使用されているモバイルの1つでこのアプリケーションを試しました。そこに私のアプリケーションは写真をキャプチャすることができません。そして、いくつかのアプリケーションを削除すると、アプリケーションは正常に機能します。
上記の仮定は非常に紛らわしいです。なぜなら、アプリがAndroidを実行しているとき、他のすべてのアプリ側を置くと、アプリにはヒープサイズによって定義されたメモリがあり、OSがさらに必要だと考えた場合メモリを割り当てるか、それ以上の割り当てに失敗すると、それらのプロセスが強制終了されます。 Android現在実行中のタスクに高い優先度を与えます。したがって、アプリを操作している場合、ヒープサイズよりもメモリが少なくなる可能性はほとんどありません。他のアプリで問題が発生する理由はいくつか異なる可能性があります。
2。私のAPI要件は何ですか?古いAPIとレベルでは利用できない特別なAPIを使用している場合、アプリがそのAPIバージョンをサポートしないと言う2つのオプションがありますまたは、その特定の機能をバックポートすることもできます。
3。私のハードウェア要件は何ですか?特殊なソフトウェアまたはハードウェアを使用しているかどうか、その特殊なハードウェアをすべてのデバイスで使用できるかどうかを自問してください。例、NFC、Bluetooth。
4。表示要件は何ですか?このアプリはモバイル専用ですか、それともモバイルとタブレットの両方ですか?タブレットとモバイルの中間にある7インチはどうですか。
5。ローカリゼーションの要件は何ですか?このアプリは特別な文字セットに依存していますか?特定のデバイスにこれらの文字がない場合はどうなりますか。
そして、あなたが言及したオブジェクトのFYI量は、数MBを超えてはなりません。ただし、ビットマップを操作するときは注意してください。 これを読んでください
アプリが特定のハードウェアで実行されるかどうかを確認する最良の方法は、そのハードウェアでテストすることです。古いAndroidのスマートフォンが横になっているのかどうか友達に尋ねて、アプリをテストしてください。
最悪の場合、メモリが異なる複数のAndroid仮想デバイスを作成します。ただし、ハードウェアアクセラレーションを使用しても、Androidエミュレータは残念ながら低速です。
@veonが言うように、あなたはいくつかの見積もりをすることができます。ただし、さまざまなコンテキストでどの程度使用されるかを知りたいため、常に少し予測できません。また、ユーザーは自分の携帯電話で他のアプリの使用状況を知る必要があります。
私が理解しているように、あなたが主に提供する必要があるのは明確な文書です。次のように文書化する方が(あなたとすべての人にとって)はるかに簡単かもしれません:
このアプリケーションは、最近のすべての標準Android電話(AndroidバージョンXXX以降)で実行されます。ただし、他のアプリケーション、特にメモリを大量に消費するアプリケーションが実行されている場合、パフォーマンスに影響する可能性があります。パフォーマンスの問題が発生している場合は、メモリとプロセスが重い他のアプリケーションを削除してください。それを判断するためのヘルプが必要な場合は、 ZDbox などのアプリケーションを使用してください。
参考までに、ZDboxへのリンクはありません。例として使用しています。
Androidのプロセスには少なくとも16MBのメモリが必要であり、最近のデバイスのほとんどではヒープを24MB以上に増やすことが保証されているようです
http://developer.Android.com/reference/Android/app/ActivityManager.html#getMemoryClass() の説明を参照してください。
すべてOS側のメモリ管理であり、 http://developer.Android.com/guide/components/processes-and-threads.html#Lifecycle で説明されているプロセスとスレッドの優先順位があります。
したがって、アプリがフォアグラウンドにある場合は、カメラからの画像を処理するのに十分なリソースがある可能性があります。
画像をキャプチャするためにどのAPIを使用しますか?
そのため、アプリケーションを実行するための最小メモリ要件を知りたいのです。
リトルアイラボ の監視ツールを使用します。それは 他のもの の間であなたのアプリの電力消費/メモリ消費/ CPU消費/ネットワーク活動を監視します。あなたは ダウンロード 30日間の試用のためにそれをすることができます。これにより、アプリが消費するリソースについて公正なアイデアが得られるはずです。ただし、アプリは通常、一連のハードウェア要件を備えてリリースされるわけではありません。あなたのメモリ/バッテリー使用量をチェックしておいてください、そしてあなたは大丈夫であるはずです。
低メモリに関しては、カメラが撮影した写真を表示したときに発生しますか、それともカメラ自体がアプリをダウンさせますか?カメラが保持しているリソースを解放していますか?この質問を見てください- Androidカメラのメモリ不足の例外