[英]How does your Application class know when the app has finished?
我有一個數據庫單例,我想在應用程序完成時對其調用.close()。
我可以在Application類的onCreate()中對數據庫調用.open(),但在哪里調用.close()?
是的,我要做的是尋找前景活動。 每個前台活動死亡后,我可以遞減。 一旦我達到零並在合理的時間內呆在那里,我就知道可以安全地關閉此類資源。 最終以這種方式在我的應用程序中進行了虛擬生命周期回調。 因此,無論您執行多少任務或從何處開始,此方法都有效。 如果您只能從一個地方運行和啟動應用程序,並且一切都只能以一種線性方式進行,那么可以使用根活動方法。
具體來說是這樣的:
基礎活動
public class BaseActivity extends Activity {
public void onResume() {
MyBaseApplicationType app = (MyBaseApplicationType)getApplicationContext();
app.incrementForegroundActivity();
}
public void onPause() {
MyBaseApplicationType app = (MyBaseApplicationType)getApplicationContext();
app.decrementForegroundActivity();
}
}
MyBaseApplication
public class MyBaseApplication extends Application {
private int mForegroundActivities;
private Handler mHandler;
public void onCreate() {
mHandler = new Handler();
}
public void decrementForegroundActivity() {
mForegroundActivities--;
if (mForegroundActivities == 0) {
mHandler.postDelayed(mRunnable, 1000 /*about a second*/);
}
}
public void incrementForegroundActivities() {
mForegroundActivities++;
}
private Runnable mRunnable = new Runnable() {
public void run() {
if (mForegroundActivities == 0) {
// Listeners of this broadcast can then clean up anything
// as needed.
Intent intent = new Intent("com.my.package.ACTION_BACKGROUNDED");
sendBroadcast(intent);
}
}
};
}
通常,您應該在onDestroy()
或onStop()
關閉數據庫連接。 在將活動從內存中刪除並銷毀之前,將調用onDestroy()
。 當您轉到其他應用程序時,將調用onStop()
。 兩種方法都可以,但是onDestroy()
通常更好,因為onStop()
會減慢應用程序的切換速度。
更多信息: http : //developer.android.com/training/basics/activity-lifecycle/starting.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.