2017-06-15 8 views
0

複数のアクティビティを含むアプリケーションがあります。Android:アンドロイドがメモリから消去すると、アプリケーションアクティビティスタックが破棄されます

一般的なビジネスロジックは常にMainActivityで実行されます。 MainActivityから、特定のデータで他のアクティビティ(Activity1、Activity2、...)に移動します。

非常にうまくいきます。

ただし、アプリケーションを最小限にしてから他のアプリケーションに移動する場合は、いつでも(5分近く)待機してください。そして、アプリケーションを再び開いて(最大限に)、私たちの活動は空のデータを表示します。

(Androidのは、私たちの活動を殺す!)

をはい、私たちはこの目的のために作成したSaveInstanceStateについては知られています。しかし、我々のアプリケーションでは、MainActivityに含まれている多くの操作があるので、これは最善の解決策ではありません。そして

...私たちの活動を殺し、私たちはMainActivityからではなく、Activity1、Activity2、からアプリケーションを再開したいアンドロイド場合は当社MainActivityコード:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(savedInstanceState != null) { 
     Log.w("MainActivity", "Activities already created, we after activity kill process"); 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
     return; 
    } 
} 

それは作品だが、我々は、他の権利でそれを行うことができます方法?

+1

あなたのmainActivityの目的は、mainActivityアクティビティを再起動することですか?他のアクティビティに移動しても何もしません。 – XepterX

+0

@XepterXありがとうございます、あなたはMainActivityにナビゲートせずに他のアクティビティを終了することができます。 –

答えて

1

"正しい方法"は、あなたのアプリケーションアーキテクチャ全体を変更することです。あなたのアプローチの問題は、設定の変更によってこのフローがトリガされ、ユーザをMainActivity

2

にリダイレクトすることです。

インスタンスの状態を保存して復元します。バックスラックに入っているときには、MainActivityに積極的に(あるいは全く存在していても)働かないでください。これらのバックグラウンド操作をServiceに移動します。

0

小さいアクティビティごとにandroid:noHistory="true"を設定できます。そうすれば、最小化後にアプリに戻ると、常にMainActivityから始まります。

編集:一般的には、あなたはアンドロイドフレームワークと戦うべきではなく、それに応じてアプリを構造化するべきです。

+0

ありがとうございます。 NoHistoryフラグを設定した場合、BackPressのナビゲーションも破損しますが、この場合の解決策ではありません。 –

関連する問題