5

私はいくつかのタブを備えたタブホストを持っており、ユーザーがタブホストを初めて開いたときだけでなく、ユーザーがタブホストに再度入力するたびにリモートデータベースからすべてのデータを再ロードする必要があるため、各タブはonresumeメソッドを実装しています。

正常に機能しますが、問題は、ユーザーが初めてタブを開いたときに、onCreateとonResumeの2つのメソッドが呼び出され、アプリがデータベースに2回接続して情報を取得することです。ユーザーがタブホストに初めて入力したときにのみonCreateが呼び出されるようにします。

このまれな問題を回避する方法は?

4

3 に答える 3

15

アクティビティライフサイクルドキュメントに記載されているように、onCreateとonResumeは、アクティビティが最初に開始されたときに常に呼び出されます。アクティビティに戻ると、少なくともonResumeが呼び出されますが、Androidがリソースを解放する必要がある場合は、onCreateが再度呼び出されることがあります。

アクティビティに戻るたびにセットアップを実行する必要がある場合は、ロジックをonResumeに配置するだけではどうでしょうか。

于 2010-12-17T18:33:48.453 に答える
0

タブのコンテンツはアクティビティであるため、アプリを起動するときに両方を作成(および再開)する必要があります。

これを回避する1つの方法は、タブコンテンツとしてアクティビティの代わりにビューを使用することです。そうすれば、onCreate()アクティビティ(TabActivity)が1つしかないため、メソッドは1つだけになります。

于 2010-12-17T18:17:50.967 に答える
0

私はあなたがあなたのアプリをリファクタリングすべきであるという他のポスターに同意します。スタンドアロンのアクティビティをタブに貼り付けて、すべてを意味のあるものにすることを期待することはできません。

そうは言っても、DBの初期化が必要かどうかを示すフラグをどこかに置くことができます。各アクティビティonResume()には、次のようなものがあります。

synchronized (MyLock.class) {
    if (!initialized) {
      initDb();
      MyLock.initialized = true;
    }
}
于 2010-12-17T20:20:46.230 に答える