onPause()の後にonDestroy()の呼び出しを防ぐ方法は?

私のアンドロイドアプリケーションでは、私はonPause()の後に、onDestroy()が呼び出されていることを知っています。

onPause()の後でアプリケーションがonDestroy()を呼び出さないようにするにはどうすればよいですか?

バックキーを押した後にインスタンスを破棄したくない。

Backキーを押すと、私のwebviewオブジェクトが破壊されています。だから、私はバックキーを押すと、再びwebviewにアクセスすることができません。

私は2つのURLを持っています。それらをURL1とURL2と想像してみてください。

When I launch URL1 in the webview and press back key the flow is onKeyDown() -> onPause()

When I launch URL2 in the webview and press back key the flow is onKeyDown() -> onPause() -> onDestroy()

なぜ行動に違いがありますか?クッキーとは何か関係がありますか?

URL1の場合 - cookies.isSecure = true;

URL2の場合 - cookies.isSecure = false;

2

7 答え

アクティビティのライフサイクルはAndroidでどのように設計されているのですか、それを妨害しないでください。アプリケーションは、必要に応じて任意の時点で実行時に破棄することができます。そうすれば、アプリケーションのロジックにライフサイクルを適応させる方がよいでしょう。

3
追加された
私は1つの方法は、何とかフォアグラウンドにあなたの活動をもたらすことだと思う。
追加された 著者 R.daneel.olivaw,
追加された 著者 denis.solonenko,
しかし、これはいつも起こるわけではありません。何度か呼び出され、時にはそれが呼び出されません。だから行動を決めることができない。
追加された 著者 EnthuDeveloper,

マニフェストであなたの活動の宣言を確認してください。最小化したときにデータを保存できるように宣言します。

アクティビティにはコンテンツを復元する機能が必要です。

3
追加された

アクティビティの onBackPressed()をオーバーライドできますが、これは最後の手段である必要があります。

あなたが始める前にこれらのリンクのハングアップを取得

アクティビティライフサイクル

デベロッパーブログ

2
追加された

ここでの答えは、マニフェストを破壊しないようにマニフェストを設定する必要があることを示していますが、設定方法には答えません。私はこの記事に似たような問題があったときに到着しました。解決策はかなりシンプルです。ただ言及する

android:persistent="true"

Reference : - https://developer.android.com/guide/topics/manifest/application-element.html

これにより、戻るボタンをクリックするとアクティビティが破壊されるのを防ぐことができます

私は別の記事のユースケースについて詳しく説明しましたが、

可能な限り活動が破壊されるのを防ぐ

私はこれが同じ問題のためにこの場所に到着する他の人を助けることを願っています

1
追加された

これを避けるためにfinish()をオーバーライドすることができます:

@Override
public void finish() {
    //super.finish();//do not call super
    moveTaskToBack(true);//move back
}
1
追加された

通常のアンドロイドアプリケーションの動作では、ホームボタンがアプリケーションを背景に隠している(ホーム画面が表示されます)、戻るボタンはアプリケーションを終了します(onPause、onStop、onDestroyの順に進みます)。

戻るボタンが押されたときにアプリケーションのインスタンスや状態を保持したい場合は、onPauseで保存することをお勧めします - SharedPreferencesまたはsqlite dbの場所に状態を保存します。しかし、保存プロセスはできるだけ早く行うべきであることに注意してください。なぜなら、アプリケーションは、終了前にonPauseが完全に実行されるまで待機するからです。

その後、インスタンス/ステートをonResumeにロードします。

0
追加された
ホームボタンの機能を模倣するmoveTaskToBack(true)というこのメソッドがあります。 onBackPressed()メソッドでそれを使用して、onDestroyを呼び出さずにアプリケーションを非表示にすることができます。
追加された 著者 josephus,
moveTaskToBackの前にstartActivity(intent)を呼び出してみてください。またはonPauseにmoveTaskToBackを配置することができます。 startActivityを呼び出すと、現在のアクティビティのonPauseが自動的にトリガされます
追加された 著者 josephus,
正確に言えば、私のアプリケーションで起こるのは、WebViewオブジェクトが破壊されているonPauseとonDestroyです。しかし、私はそれがバックボタンをクリックした後でもそこにいて欲しい。したがって、次のトラバースのためにwebviewオブジェクトを格納することは困難になっています。
追加された 著者 EnthuDeveloper,
ジョセフに感謝します。このようにして、私はwebviewを後ろに押し込むことができます。しかし、それは完全にアプリケーションを終了しています。とにかく私はこのメソッドコールの後に起動する画面を与えることができますか?私はstartactivity()を試しましたが、再びonPause()とonDestroy()を呼び出します。
追加された 著者 EnthuDeveloper,
その場合、WebViewアクティビティだけでなく、完全なアプリケーションも最小限に抑えられます。 webviewだけが最小化され、アプリケーションの前の画面が損なわれていない場合は非常に良いでしょう。
追加された 著者 EnthuDeveloper,

isFinishing()を使用して onPause()の後に onDestroy()が呼び出されるので、コードを避けることができます。

0
追加された