1

さまざまなアクティビティを通じてサーバーからのデータを使用する新しい Android アプリを構築しています。

現在、私は 2 つのアクティビティを持っています。メインのアクティビティはサーバーに接続し、サーバーからのデータを使用してシングルトン オブジェクト (すべてのアクティビティで共有されます) を作成します。

明らかに、シングルトン クラスに保持されているデータのインスタンスがあり、静的メソッドからオブジェクトを取得します。

これがアクティビティ間で共有データを実装する最良の方法ではないことはわかっています-インテントを介してそれらを渡すことができます(ただし、同じデータを使用する3〜4のアクティビティをさらに作成する予定なので、できるときにそれらを渡す理由アプリの静的コンテキスト グローバルでそれらを)。

この実装が私を悩ませたのは、この問題です。ユーザーが2番目のアクティビティで別のアプリに切り替え、アプリがバックグラウンドでしばらく留まると、Androidはアプリで使用されていたメモリを解放し、アプリに戻るとnullになりますシングルトン オブジェクトのフィールドの 1 つを使用すると、ポインター例外が発生します。

(オブジェクトが null の場合) メイン アクティビティに戻ってデータを再作成することで問題を解決しましたが、これにより、アクティビティが破棄されるたびに再接続されます (サーバー上のデータはそれほど変更されないため、最適ではありません)。サーバー データを onDestroy に保存し、アクティビティに戻るたびにオブジェクトを再作成する必要があることはわかっていますが、これはすべてのアクティビティで発生する必要があり、データは約 4 ~ 5 KB で、ファイルに書き込む必要があることを意味します。解析に時間がかかります(電話のSDカードにアクセスします)。

Parcelable オブジェクトを使用してインテントを介してデータを共有することを考え始めています - Android はインテントのデータを自動的かつ最適な方法で保存および復元できると思います。(参照: http://bimbim.in/post/2010/09/27/Android-Passing-object-from-one-activity-to-another.aspx )

問題は、インテントが私の問題を解決するかどうかです。他の方法はありますか?より良い、より速い方法は?

ありがとう!

4

1 に答える 1

1

問題は活動のライフサイクルに関連していると確信しています。Android がアクティビティを強制終了すると、メイン アクティビティのonRestoreInstanceState()メソッドを使用してデータをバンドルとして保存できるため、アクティビティが再作成されたときに、アクティビティのonCreate()メソッドでデータを復元できます (例としてこちらを参照)。SharedPreferencesアクティビティonResume()onPause()メソッドで使用することもできます。どちらのアプローチでも、考え方は同じです。オブジェクト/データを一時的にディスクに保存し、後で復元します。

于 2013-01-16T14:19:49.393 に答える