onrestart()は、バックボタンがヒットしたときに呼び出されますが、これを防ぐ方法はありますか?
質問
私のアプリケーションは、新たに起動されたときにいくつかのWebサービスを呼び出します。また、ユーザーがアプリ(バックグラウンドで実行されていた)を起動して再開した場合、これらのWebサービスに電話したいと思います。アプリが起動されたときとアクティビティが焦点を合わせているときに発射されたすべての方法を調べました。 onstart()、onresume()、onrestart()など。
Onrestartは私のWebサービスの呼び出しを行い、私の見解を更新するのに良い賭けだと思った。問題は、アクティビティA(電話をかける)からアクティビティBに移動してバックボタンを押す場合、アクティビティAはOnrestart()を発射するWebサービスに電話してください。アプリのアクティビティからメイン画面に戻るたびに、これが起こることは望ましくありません。アプリアクティビティAが外部から焦点を合わせた場合にのみ、サービスを呼び出すことを望みます。私が知っておくべき彼らの他のイベントは私を助けることができるでしょうか?ホームボタンを押してからアプリアイコンを押すと、更新する必要がありますが、メイン画面で何かをクリックして新しいアクティビティを開いてから戻るボタンを押してはなりません。
質問が理にかなっていることを願っています。
ありがとう。
解決
による アクティビティライフサイクル, onRestart
前に呼び出されます onResume
. 。したがって、Web通話を入力した場合 onResume
, 、アクティビティが最初に開始され、いつでも再開するときに呼び出されます。 onRestart
ユーザーがそのアクティビティに戻るときにのみ呼び出されます。したがって、あなたはあなたのアクティビティにブール値を持つことができます(例:boolean isactivityrestarting)falseに設定されてから、trueに設定します onRestart
. 。それが本当なら onResume
ヒットし、その後、Web通話をしないでください。
例コード:
public void onRestart() {
isActivityRestarting = true;
}
public void onResume() {
if (!isActivityRestarting) {
executeWebCalls();
}
isActivityRestarting = false;
}
他のヒント
良い onCreate
あなたの最善の策ですが、いくつかの注意が必要です。 (ここのメイン画面は、WebServiceを呼び出す画面です)
- ユーザーがメイン画面のバックボタンを押した場合、
onCreate
呼び出されます。 - ユーザーが他の画面のバックボタンを押してメイン画面に戻った場合、
onCreate
呼ばれることはありません。 - ユーザーがホームボタンを使用してメイン画面を終了し、長い押しホームボタンで戻ってきて、アプリを選択した場合、
onCreate
呼ばれていません。
これまでのところ、ここにキャッチがあります。
- ユーザーがホームボタンを押して終了してからランチャーアイコンに移動した場合、
onCreate
呼ばれていません。理論的には、それは一貫した動作ですが、ユーザーが最初からアプリを起動していると考えているので奇妙に見えるかもしれません。
あなたのANSにとって、OnCreateはわずかなチェックで行く方法です。
使用する場合はsoln onStart
また onRestart
:
できることの1つは、Webサービスに電話をかけたときに対応する共有設定にタイムスタンプを保存することです。ユーザーが(自宅でもバックキーでも)出てから戻ってきたときに、時間を確認し、保存された時間と比較することができます。違いが高い場合は、Webサービスを呼び出すだけです。この作業を行うには、使用する必要があります onStart
また onRestart
.
これは通常の動作であるためです(参照してください http://developer.android.com/reference/android/app/activity.html#activitylifecycle)私はそれに反対しようとするのではなく、ライフサイクルの方法で作業することをお勧めします。
この他のアクティビティであろうとその他のものであろうと、アプリは外部から焦点を合わせています。
おそらく、あなたはサービスを呼び出すべきです onCreate
?