Tabhostのタブを初めて開くときにOnresumeが呼び出されるのはなぜですか?
-
11-10-2019 - |
質問
いくつかのタブが付いたタブホストがあり、各タブにはOnresumeメソッドが実装されています。これは、ユーザーがタブホストで再び入力するたびにすべてのデータをリモートデータベースからリロードする必要があるため、初めて開いたときだけでなく
わかりました、それはうまくいきますが、問題はユーザーが初めてタブを開くとき、2つの方法、OnCreateとOnResumeが呼び出され、その後、私のアプリはデータベースに2回接続して情報を取得します。ユーザーが初めてTabhostに入るときに、Createと呼ばれたい
このまれな問題を避ける方法は?
解決
で述べられているように アクティビティライフサイクルドキュメント, 、OnCreateとOnresumeは、両方ともアクティビティが初めて開始されるときに常に呼ばれます。アクティビティに戻ると、少なくともOnresumeが呼び出されますが、Androidがリソースを解放する必要がある場合は、OnCreateが再び呼び出される場合があります。
アクティビティに戻るたびにセットアップが発生する必要がある場合、ロジックをOnresumeに配置するだけではありませんか?
他のヒント
タブのコンテンツはアクティビティであるため、アプリを開始するときは両方とも作成(および再開)する必要があります。
これを回避する1つの方法は、アクティビティの代わりにビューをタブコンテンツとして使用することです。そうすれば、1しかありません onCreate()
メソッドは1つのアクティビティしかないためです( TabActivity
).
私はあなたがあなたのアプリを再要素するべきであるという他のポスターに同意します。スタンドアロンのアクティビティをタブに貼り付けて、すべてが理にかなっていることを期待することはできません。
そうは言っても、DBが初期化が必要かどうかを示す場所にフラグを立てることができます。各アクティビティのonResume()に、あなたは次のようなものを持っています、
synchronized (MyLock.class) {
if (!initialized) {
initDb();
MyLock.initialized = true;
}
}