1

私はAndroidの定期的なサービスをバックグラウンドで実行していますが、その前でアクティビティは実行されていません。15分ごとに、サービスはAlamManager(RTC_WAKEUP)によってWakeLocksを使用して呼び出され、数秒間ネットワークアクションを実行してから停止します。このサービスは、呼び出されるたびに、PendingIntentオブジェクトを格納する静的変数を使用します。ところで:SharedPreferencesや永続的なレイアウトの使用については知っていますが、それは私の質問ではありません。

私の本当の質問は、静的変数がまだ有効であるということはどうしてでしょうか?その間15分間非アクティブ(実際のデバイスのスリープ、とにかく重要ですか?)でも、静的変数は結局有効であるように見えます。メインUIで実行されているアクティビティまたはサービスがない場合、スレッドや別のワーカースレッド、あるいはその両方がプロセス全体を停止し、静的な値も消去されると考えて読みました。

androidが私のプロセスを動かないようにし、すべての静的変数を保持する場合とその理由。スケジュールされたAlamManagerイベントと相関関係がありますか。私はあえてアンドロイドが私のプロセスメモリを有効に保つと言います!?

4

2 に答える 2

2

静的変数がまだ有効であるのはどうしてですか?

Androidは、アラームの合間にプロセスを終了しませんでした。

メインUIで実行されているアクティビティまたはサービスがない場合、スレッドや別のワーカースレッド、あるいはその両方がプロセス全体を停止し、静的な値も消去されると考えて読みました。

Androidはいつでもプロセスを終了できます。実行中のコンポーネント(アクティビティまたはサービス)がない場合、Androidが他のプロセスを終了する前にプロセスを終了する可能性が高くなります。ただし、AndroidがRAMを必要としない場合は、プロセスはそのままになります。

ただし、イベントが発生するたびにプロセスが発生するかどうかわからないためAlarmManager、静的データメンバーを初期化する必要がある場合に対処する必要があります。

于 2012-07-03T19:32:05.003 に答える
0

静的変数を使用しているため、ガベージコレクターは、静的変数を持つクラスのクラスローダーもクリアされるまでそれらをクリアしません。「クラスまたはインターフェースは、その定義クラスローダーがガベージコレクタによって再利用される場合にのみアンロードされる可能性があります」では、http://docs.oracle.com/javase/specs/jls/se5.0/html/executionを参照してください詳細についてはhtml#12.7

于 2012-07-03T19:31:58.823 に答える