2012-11-06 3 views
11
私は次の例では、アプリケーションの直列化\デシリアライズをテストする必要があります

AndroidのGCによってアプリケーションの殺害をシミュレートする方法

  • アプリがバックグラウンドでの時間(アイドルモード)の多くだったとGCによって殺されました。
  • アプリはバックグラウンドで、リソース(memory \ cp)が不足しているためGCによって殺されました。

一部のデバイスでは、1-2個のゲームを起動することでシミュレートできます。 しかし、1GBのメモリを搭載したクアッドコアデバイスでは、4~10の大型ゲームでは非常に難しく、時間がかかります。

私はリソースへの負荷をエミュレートするところ、いくつかのデモを実装しよう:

  • 打ち上げにサービス
  • 打ち上げ多くの活動
の多くは、オブジェクトの配列を作成するビットマップアレイ
  • を作成

    結果はありませんが、アプリケーションは(古いデバイスであっても)まだ動作しており、デモがOutOfMemoryExでクラッシュしています。

    デモアプリケーションで高負荷をシミュレートするにはどうすればよいですか?

    ありがとうございます!

  • +4

    「アクティビティを保持しない」という設定の下に開発者オプションがあります。これは、ユーザーが離れるとすぐにアクティビティを破棄することを意味します。 – Ifor

    +1

    私は4.0のアンドロイドに言及したそのオプションを@Iforに持っていますが、2.3では(私はそれをアップグレードしていなかったと思います) – HericDenis

    +0

    @Ifor、ありがとう、しかしそれは絶対に違います。 'Do not keep activities'の場合​​はonDestroyと呼ばれ、アプリケーションは通常通り終了します(アプリからの一般的な終了など)。 – nister

    答えて

    2

    「GC」は実際には「Out Of Memory Killer」と悪用され、シグナル9のようにアプリケーションを殺します。ルートデバイスでは、kill(1)コマンドをシェルから呼び出すことができます。kill(2)関数はネイティブライブラリからJavaにバインドされているかどうかはわかりません)、いつでもアプリケーションを終了することができます。

    Activityのシステムでは通常、バックグラウンドになると、さらに警告や反応がなくてもアプリケーションを強制終了するため、onStopが呼び出されます。したがって、アプリケーションを終了して終了させると、OOMが強制終了されるという適切なシミュレーションです。

    +0

    それは真実のように見え、私は同じと思った。しかし、アクティビティのコールバックとログをチェックすると、まったく異なる動作が表示されます。タスクマネージャからアプリを終了すると、アプリからの通常の終了(onDestroyと正しい仕上げ)のように見えます。 – nister

    +2

    @nister:タスクマネージャーからそれを削除すると、それがそうであるかもしれません。しかし、問題は、メモリ不足のためにアプリケーションが強制終了されたときに何が起こるかです。 –

    +0

    メモリの制約のためにAndroidがアプリを抹殺した後、ユーザーがアプリを開いた場合、最後のアクティビティが開きます。手動でアプリケーションを終了すると、主なアクティビティだけが復元されます。 –

    0

    メモリクリーナーをプレイストアにインストールします。私はこれをインストールします:easymemorycleaner

    一度あなたの記憶を掃除しました。メモリ内に保存された変数はなくなります。 Parcelableにデータを保存していない限り。それは永続的です。

    関連する問題