Androidがアクティビティ間の静的な値の転送を推奨しない理由

一般的に、インテントはAndroid開発で値を渡すために使用されますが、大量のデータがある場合、シリアル化が必要になる可能性があり、オーバーヘッドが増加します。値を渡すために静的を使用しないのはなぜですか?
アクティビティでアクセスする静的変数を書き込む場合、これはタブーであり、アクティビティをリサイクルできず、メモリリークが発生する可能性があります。特に静的変数を渡すために新しいクラスを開くとどうなりますか?
答えはノーです!
まず最初に、静的変数は簡単に回復することはできませんが、プロセス全体でローカル変数として使用され、時間内に解放されない場合、パフォーマンスのオーバーヘッドが発生します。この記事のJavaメソッドの領域、スタック、ヒープは、変数の格納について非常に明確です。
さらに深刻なことに、静的変数が失われる可能性があります。AndroidはJavaで開発されており、その静的変数のライフサイクルはJavaの設計に従います。静的変数は、クラスが読み込まれ、メソッド領域に存在するときに割り当てられることがわかっています。クラスがアンロードされると、静的変数は破棄されます。PCのクライアントプログラムでは、クラスがロードおよびアンロードされます。これは、jvmプロセスの開始および終了と同じです。Androidではどうですか?使用されるDalvik vmは同じです。

  • 1.静的変数は、クラスが読み込まれるときにメモリを割り当てます。
    クラスはいつ読み込まれますか?アプリを起動すると、システムがプロセスを作成し、このプロセスがDalvik VMのインスタンスをロードします。その後、コードがDVMで実行され、クラスのロードとアンロード、ガベージコレクションなどがDVMを担当します。つまり、プロセスが開始すると、クラスがロードされ、静的変数にメモリが割り当てられます。
  • 次に、クラスがアンロードされると、静的変数が破棄されます。
  • クラスはいつアンロードされましたか?プロセスの最後。注:通常、すべてのクラスはデフォルトのClassLoaderによってロードされます。ClassLoaderが存在する限り、クラスはアンロードされず、デフォルトのClassLoaderライフサイクルはプロセスと一致します。この記事では、一般的な状況について説明します。
  • 3. Androidでのプロセスはいつ終了しますか?
  • これはAndroidのプロセスの中核であり、メモリ管理はPCとは異なります。リソースが十分であれば、Androidはプロセスを強制終了しません。別の意味は、プロセスがいつでも強制終了される可能性があることです。Androidは、リソースが十分になると、強制終了されたプロセスを再起動します。つまり、静的変数の値は、処理されなければ信頼できず、メモリ内のすべてが信頼できないと言えます。信頼性を確保したい場合は、NandまたはSDカードに保存して、再起動時に復元する必要があります。別の状況では、プロセスの終了に相当するすべてのアクティビティを終了することができないため、ユーザーがアイコンをクリックしてアプリケーションを起動したときに、静的変数に以前に格納された値がまだ存在する場合があるため、特定の状況に応じて空の操作を実行します。

シナリオは次のとおりです。アプリのホームがバックグラウンドに切り替わります。しばらくすると、アプリプロセスがシステムによってリサイクルされ、アプリが呼び出されます。このとき、アプリプロセスは再起動しますが、ページの起動はデフォルトのプロセスに直接従わず、直接開きます。前回去ったときのページなので、初期化されたFlashActivityを実行する機会がないため、この静的変数はnullになります。この状況は、プロセスがシステムによってリサイクルされた後にのみ表示されます。プロセスは自分で閉じます。

参照:
Android静的変数のライフサイクル
Android静的変数の損失処理

230の元の記事を公開 94のような 270,000以上を訪問

おすすめ

転載: blog.csdn.net/yu75567218/article/details/104821693