0

私はsqlite androidのある種のベンチマークを行っています。実行前に合計 120k をプリロードした場合、ほとんどのデバイスに十分なメモリがありますか? クエリの実行中は、他のスレッドも実行されているため、メモリに問題がある可能性があります。onLowMemory() メソッドを利用するにはどうすればよいですか? その方法を使用する例はあまりないようです。アドバイスをありがとう。

4

1 に答える 1

2

メソッドを利用するのは、Activity でオーバーライドするのと同じくらい簡単です。

ただし、ドキュメントを注意深く読んでください。

これは、システム全体のメモリが不足しているときに呼び出され、積極的にプロセスを実行してベルトを締めようとする場合に呼び出されます。これが呼び出される正確なポイントは定義されていませんが、一般的には、すべてのバックグラウンド プロセスが強制終了されたとき、つまり、強制終了を回避したいサービスとフォアグラウンド UI をホストしているプロセスを強制終了するポイントに到達する前に発生します。

いいものにしたいアプリケーションは、このメソッドを実装して、保持している可能性のあるキャッシュやその他の不要なリソースを解放できます。このメソッドから戻った後、システムは gc を実行します。

「バックグラウンド プロセス」AsyncTaskインスタンスとサービスが含まれているのか、それとも単にバックグラウンド アプリケーションが含まれているのかはわかりませんが (ドキュメントでは定義されていません)、そう推測します。

したがって、このメソッドが呼び出されると (呼び出された場合)、システムは (アクティビティよりも低い優先度で) 可能なすべてを既に強制終了しており、メモリ内の不要なリソースを解放するように求めます。

したがって、メモリ不足に対応したい場合、これではすでに手遅れになる可能性があります。


ほとんどのAndroid デバイスでメモリが不足するかどうかという一般的な質問については、私にはわかりません。問題は、デバイスが大きく異なることです。

また、実行前に 120k のクエリをプリロード (またはスタック) する必要がある実際の状況を想像するのも難しいと思います。別の 200 などをスタックするよりも、簡単に 200 をスタックしてそれらをコミットできます。


なぜこれをベンチマークする必要があるのか​​わかりませんが、アプリケーション データベースのデフォルト エントリに対して 120k のクエリを実行しないでください。

いっぱいになったデータベースを使用してアプリケーションを配信し、assets/-folder からコピーすることができます。android-sqlite-asset-helperを参照してください

于 2012-09-07T20:08:34.297 に答える