1

Activity1 の静的変数にいくつかのデータを保存し、Activity3 と Activity 5 にアクセスしています。つまり、
Activity1---> Activity2--->Activ3
................. ....|
...................Activity4.-----> Activ5

Activity1 からアプリケーションを完全に閉じると、これは正常に機能します (つまり、ユーザーが Activ5 にいる場合、[戻る] ボタンをクリックしてから -->Activ4-->Activ2-->Activ1-->Exit)。

しかし、ユーザーはモバイルの終了ボタン (アプリケーションの終了ではありません) をクリックして Activ3,4,5 でアプリを終了しています。数時間後、ユーザーはアプリケーションを再度開き、それ (アプリ) は Activi3 または 4 または 5 から開始されます。アプリが閉じられた場所)。

今、私はいくつかのデータ(Activ1の静的変数に保存したもの)を使用しているので、
null値を取得しています。なぜこれが幸せなのか。この種のエラーを回避する方法。
これを回避するためにsharedprefを使用しました.これが唯一の解決策ですか?

4

4 に答える 4

1

渡された値を後で取得できるように、再作成時にアクティビティの状態を復元します。たとえば、意図を介して渡された整数の場合、次のようにします。

//this will save the value if an activity is killed in background.
@Override
    protected void onSaveInstanceState(Bundle outState) 
    {
        getIntent().putExtra("count", getIntent().getStringExtra("count"));
        super.onSaveInstanceState(outState);
    }

//In restore instance state, retrieve the stored values. The following work can also be done //in oncreate, as when an activity is killed in background, onCreate method is also called.

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) 
    {
        if(savedInstanceState == null)
            return;
        int count = getIntent().getIntExtra("count", 0);
        super.onRestoreInstanceState(savedInstanceState);
    }
于 2013-11-02T10:14:59.693 に答える
1

以前のアクティビティにメソッドを追加onSaveInstanceStateし、メソッドが受け取ったバンドルを確認する必要がありonCreateます。詳細については、アクティビティのライフサイクルを確認してください。

于 2013-11-02T09:59:07.277 に答える
0

静的メンバーに値を保存しないでください。アクティビティ コンテキストが解放されるため、静的値が失われます。アクティビティ間で値を渡すための推奨される方法は、インテントと共にバンドルを使用することです。

于 2013-11-02T09:56:36.783 に答える
0

新しいクラスを作成してアプリケーションを拡張し、その中に必要なすべてのデータを保存できます。これは非常に便利ですが、マニフェスト ファイルにアプリケーションの名前を追加する必要があることを忘れないでください。

于 2013-11-02T09:57:53.717 に答える