質問

ように、かなり複雑なAndroidアプリケーションを必要とするやや大量のデータは、アプリケーション(いと思うんで合計約500KBはこの大規模なモバイルデバイス?).だからこそできるように、任意の向きの変化は、アプリケーション(の活動において、より正確に原因を完全に破壊と再現。私の知見をもとに、使用するアプリケーションクラスあなたのライフサイクル(それは、すべての意図や目的、必ずインスタンスを生成).ることに意味が店舗の状態情報内のアプリケーションのクラスを参照してから、は一般的には、"可"の方法によりメモリ制約のモバイルデバイス?こんなアドバイスはこの話題です。よろしく!

役に立ちましたか?

解決

とは思わない500kbまでその人のみ対象となります。

かに記載のでどのように取り組む私の問題のデータ消失ましょう。作成したグローバルシングルトンを使用するアプリケーションクラスすることができたからのアクセスの活動に使いました。

とすることができますデータグローバルシングルトンの場合はフロントにお問い合わせください。

public class YourApplication extends Application 
{     
     public SomeDataClass data = new SomeDataClass();
}

その他の活動:

YourApplication appState = ((YourApplication)this.getApplication());
appState.data.UseAGetterOrSetterHere(); // Do whatever you need to with the data here.

いて議論す ここに私のブログ, 下部の"グローバルシングルトン."

他のヒント

頼りにしている人たち Application インスタンスが間違っています。最初はこう見えるかもしれませんが、 Application アプリプロセス全体が存在する限り存在しますが、これは誤った仮定です。

OS は必要に応じてプロセスを強制終了することがあります。すべてのプロセスを5つのレベルの「殺傷性」に分けます。 ドキュメントで指定されている.

したがって、たとえば、ユーザーが着信に応答したためにアプリがバックグラウンドになった場合、RAM の状態によっては、OS がプロセスを強制終了する (または強制終了しない) 場合があります ( Application プロセス中のインスタンス)。

より良いアプローチは次のとおりだと思います データを内部ストレージ ファイルに保存します そして活動が再開したら読んでください。

アップデート:

多くの否定的なフィードバックを受け取ったので、説明を追加する時期が来ました。:) そうですね、私は当初、状態がアプリにとって本当に重要であるという誤った仮定を使用していました。ただし、アプリが時々状態を失っても問題がない場合 (再読み込み/再ダウンロードされるだけの画像である可能性があります)、それをメンバーとして保持しておいても問題ありません。 Application.

あなたが活動の「グローバル・シングルトン」の外にアクセスしたいとあなたがシングルトンを得るために、すべての関係オブジェクトを通してContextを渡したくない場合は、

は、あなただけの、あなたのアプリケーションクラスの静的属性を定義することができました自分自身への参照を保持しています。ただ、onCreate()方法で属性を初期化します。

例えば、

public class ApplicationController extends Application {
    private static ApplicationController _appCtrl;

    public static ApplicationController getAppCtrl()
    {
         return _appCtrl;
    }
}

Applicationのサブクラスはまた、リソースを入手することができますので、あなたが同じように、それらを返す静的メソッドを定義するとき、あなたは、単にそれらにアクセスすることができます:

public static Resources getAppResources()
{
    return _appCtrl.getResources();
}

しかし、回避のメモリリークにコンテキストの参照を周りに渡すときに非常に注意してください

デイブ、それがどのようなデータのでしょうか?それは一般的なデータをだ場合、全体としてアプリケーションに関係すること(例:ユーザデータ)は、アプリケーション・クラスを拡張し、そこでは、それを格納します。活動へのデータが関係する場合は、画面の回転にデータを永続化するonSaveInstanceStateとonRestoreInstanceStateハンドラを使用する必要があります。

あなたは実際にあなたの活動が破壊され、再作成されていないことを確認するために、オリエンテーション機能を無効にすることができます。ルックはこちらここhref="https://stackoverflow.com/questions/456211/activity-restart-on-rotation-android">

あなたはApplicationクラスを作成して、アプリケーション内の任意の場所よりも私たちのためにその通話であなたのすべてのデータを保存することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top