7

開発中のアプリケーションで発生しているこの動作に困惑しています...

短い:

ユーザーが [戻る] ボタンを押してアプリケーションを終了し、[最近] ボタンを押してアプリケーションを再起動したときに、インテント データが消去されません。(それ以外の場合、インテント データは消去されます)

長いです:

URI スキームから渡されたデータを収集するために使用されるスプラッシュ スクリーンを備えたアプリケーションがあります。次に、データをメイン アクティビティに転送するインテントを設定します。メイン アクティビティにはフラグメントがあり、マスター/詳細テンプレートに基づいています。

ホームボタンを押してからアプリケーションに戻る、最近のアプリボタンを押してからアプリケーションに戻るなど、すべての場合にインテント データがクリアされます。インテント データがクリアされない唯一のケースユーザーが [戻る] ボタンを押してから [最近のアプリ] ボタンを押して、アプリケーションに戻るときです。

インテントに関連するコードのスニペット:

// Splash Screen Activity
@Override
protected void onPostExecute(Void result) {
    // Data is done downloading, pass notice and app ids to next activity
    Intent intent = new Intent(getBaseContext(), ListActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("id1", id1);
    intent.putExtra("id2", id2);
    intent.putExtra("id3", id3);
    startActivity(intent);
    finish();
}


// ListActivity retrieving intent data
Intent intent = getIntent();
if (intent != null) {
    this.id1 = intent.getExtras().getString("id1");
    this.id2 = intent.getExtras().getString("id2");
    this.id3 = intent.getExtras().getString("id3");
}


// ListActivity clearing intent data
@Override
public void onPause() {
    super.onPause();
    // Clear intent data
    Intent intent = getIntent();
    intent.putExtra("id1", "");
    intent.putExtra("id2", "");
    intent.putExtra("id3", "");
}

また、intent.removeExtra("id1") を使用してみましたが、それもうまくいきませんでした。

何が起こっているのですか?インテント データをクリアするために onPause() が常に呼び出されているにもかかわらず、Android が古いインテントを保持しているかのようです。

4

4 に答える 4

26

実際には、これは Android が履歴からアプリを開始したためであり、インテント エクストラはまだそこにあります。

この質問を参照してくださいAndroid: 「最近のアプリケーション」からアプリを起動すると、インテントで使用されたエクストラの最後のセットで起動します

したがって、この特殊なケースを処理するためにこの条件を追加すると、修正されました

int flags = getActivity().getIntent().getFlags();       
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // The activity was launched from history
    // remove extras here
}
于 2014-06-19T21:39:42.880 に答える
1

私が直面していた問題を回避するために、アクティビティ間でデータを渡す手段として SharedPreferences を使用することにしました。

通常、この目的で SharedPreferences が使用されないことはわかっていますが、問題が解決して機能しました。

于 2013-04-29T02:58:33.967 に答える