2017-07-28 3 views
0

メインアクティビティを起動し、UIの一部の設定を変更し、戻るボタンを押してからアクティビティを再度開きます。 onCreate()が再び呼び出され、アクティビティがデフォルトの状態に戻ります。どうしてこれなの?singleInstance起動モード:アクティビティが前面に来ると、なぜonCreateが呼び出されますか?

私はマニフェストでこれを持っているので、私は唯一のonResume()が呼ばれることを期待する:

android:launchMode="singleInstance" 
+0

バックボタンを押すと、現在開いているアクティビティが破棄され、実際にはonCreateが呼び出されます。 – Enzokie

答えて

1

私は戻るボタンを押し、UIでいくつかの設定を変更し、主な活動を開始し、その後、活動を再開。 onCreate()が再び呼び出され、アクティビティがデフォルト状態に戻ります。どうしてこれなの?

これは、アクティビティライフサイクルの予想される動作です。戻るボタンを押すとアクティビティが破棄され、onCreateメソッドから開始されます。

enter image description here

+0

私の悪いです。私は 'onBackPressed()'をオーバーライドして、本当に終了したいかどうかを尋ねる必要があると思います。それ以外の場合は、[ホーム]ボタンを使用します。 –

+0

@Primož'c0dehunter'KraljYep。あなたは彼に戻ることを望むかどうかをユーザに聞くことができます。その後、あなたは 'onBackPressed'をオーバーライドしなければなりません。 –

1

あなたが戻って押したときに、それが活動をdestroyesためです。 私はあなたが望むのは、あなたがこの活動に戻ったときに状態を保つことです、実際にはそれを1つのインスタンスにすることではないと思います。したがって、必要な情報を保存してからonCreateで復元する必要があります。

単一インスタンスは、複数のアクティビティを終了せずに複数のアクティビティを起動すると、startActivity()を呼び出すときにsingleInstanceを持つものが先頭に戻り、onCreateを呼び出さないことを意味します。しかし、これは、あなたが背を押してこの行動を取ることができないことを意味します。 super.onBackPressed()を呼び出す代わりに、onBackPressedをオーバーライドして、別のアクティビティ(元に戻す必要があるアクティビティ)を開始することもできます。これはあなたが望むことをしなければならないが、それが管理するのが難しいと考えるならば。ところで

は、あなたがあなたの活動は、あなたの現在の活動の皮を作るためにonBackPressed()moveTaskToBack(true);を使用して代わりにしてみ

2

を殺害されていないという事実に頼るべきではありませんので活動は、システム自体に殺されるかもしれないことを覚えておいてください破棄して再度開くことができます

@Override 
public void onBackPresses(){ 
    moveTaskToBack(true); 
} 
+0

この方法はわかりませんでしたが、あなたはまだシステムによってその活動が破壊される可能性があることを覚えておく必要があります。それが破壊されていないという事実に頼らないでください – liltof

関連する問題