-2

重複の可能性:
Androidアクティビティ内の変数の状態

android OSがメモリ不足のためにアプリケーション(サービスを使用)を強制終了した場合、AndroidOSはアプリケーションを再実行しようとします。android.developersサイトから:

**これは、サービスが実行されているほとんどの場合、メモリの負荷が高い場合にシステムによって強制終了される可能性があることを意味します。これが発生した場合、システムは後でサービスの再起動を試みます。****

私のメインアクティビティコードに次のようなものがある場合:

public static MainActivity mainAct;
protected void onCreate(Bundle savedInstanceState) 
{mainAct = this;}

android OSが強制終了すると、mainActのアプリケーション値が失われます。これは、サービス中ではなく、アクティビティでonCreate()のみが初期化されるためです。

そのオブジェクトを「保存」して、メモリ不足のためにアプリが強制終了された場合に値を保持する方法を教えてください。

4

2 に答える 2

0

サービスにonDestroy()メソッドを実装して、アプリケーションの状態をデバイスに永続化できます。したがって、サービスのonStartCommand()メソッドが呼び出されると、永続化された状態(存在する場合)を確認し、その時点からアプリケーションを再起動できます。

たとえば、さまざまなソースから記事を取得するニュースフィードアプリがある場合は、ダウンロードを開始する前にファイルに状態を書き込んで、次のように言うことができます。

download=irishtimes-31_01_2013

したがって、誰かがバッテリーを抜いたためにアプリケーションが完全に失敗した場合は、再開することがわかっている状態になります。同様に、AndoidがonDestroy()メソッドを呼び出してサービスを終了する場合、同じ方法でデバイスに状態を永続化できます。次に、サービスがバックアップを開始すると、ファイルから読み取り、「オブジェクト」にロードして再度使用できる状態になります。

ファイルだけに制限されているわけではありません。@ wtstang02で述べたように、データベースを使用することもできます。

于 2013-01-29T01:21:57.990 に答える
0

public static MainActivity mainAct方向が頻繁に変わるなど、メモリリークの問題が発生します。mainActには参照があるため、現在のアクティビティインスタンスをgcで収集できません。

于 2013-01-29T01:50:33.690 に答える