9

私のアプリケーションは、新しく起動したときにいくつかの Web サービスを呼び出します。ユーザーがアプリ (バックグラウンドで実行されていた) を起動して再開した場合にも、これらの Web サービスを呼び出したいと思います。アプリが起動されたとき、およびアクティビティがフォーカスされたときに起動されるすべてのメソッドを調べました。onStart()、onResume()、onRestart() など....

onRestart は、Web サービス呼び出しを行ってビューを更新するのに適していると思いました。問題は、アクティビティ A (呼び出しを行う側) からアクティビティ B に移動して [戻る] ボタンを押すと、アクティビティ A が onRestart() を起動することです。そして、Web サービスを呼び出します。アプリでのアクティビティからメイン画面に戻るたびに、これが発生するのは望ましくありません。アプリのアクティビティ A が外部からフォーカスされた場合にのみ、サービスが呼び出されるようにします。私が知っておくべき、私を助けることができる他のイベントはありますか? ホームボタンを押してからアプリアイコンを押すと更新されますが、メイン画面で何かをクリックして新しいアクティビティを開いてから戻るボタンを押しても更新されません。

質問が理にかなっていることを願っています。

ありがとう。

4

3 に答える 3

8

アクティビティライフサイクルによると、の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;
}
于 2011-12-05T19:12:06.050 に答える
4

それonCreateが最善の策ですが、いくつか注意点があります。(ここのメイン画面はwebserviceを呼び出す画面です)

  • ユーザーがメイン画面の BACK ボタンを押すと、onCreateが呼び出されます。
  • ユーザーが別の画面で [戻る] ボタンを押してメイン画面に戻った場合、onCreate呼び出されません。
  • ユーザーが HOME ボタンを使用してメイン画面を終了し、HOME ボタンを長押ししてアプリを選択して戻ってきた場合、onCreateは呼び出されません。

これまでのところ、問題はありません。

  • ユーザーが [ホーム] ボタンを押して終了し、ランチャー アイコンに移動した場合、onCreateは呼び出されません。理論的には一貫した動作ですが、ユーザーが最初からアプリを起動していると考え、最初にどのように終了したかを忘れている可能性があるため、奇妙に見えるかもしれません。

あなたの答えとして、onCreateはわずかなチェックを行う方法です。

onStartorを使用している場合は解決onRestart:

できるチェックの 1 つは、共有設定にタイム スタンプを保存することです。これは、Web サービスを呼び出したときに対応します。これで、ユーザーが (HOME または BACK キーで) 終了して戻ってきたときに、時間を確認して、保存されている時間と比較することができます。差が大きい場合は、Web サービスを呼び出すだけです。これを機能させるには、onStartまたはを使用する必要がありonRestartます。

于 2011-12-05T19:00:20.240 に答える
1

これは正常な動作であるため ( http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleを参照)、これに反対するのではなく、ライフサイクル メソッドを使用することをお勧めします。

あなたのアプリは、この他のアクティビティからであろうとなかろうと、外部から注目されています。

おそらく、でサービスを呼び出す必要がありますonCreateか?

于 2011-12-05T18:55:30.050 に答える