我有一个数据库单例,我想在应用程序完成时调用.close()。
我可以在Application类的onCreate()中调用数据库中的.open(),但是我在哪里调用.close()?
答案 0 :(得分:1)
是的,我做的是寻找前景活动。在每个前景活动消失后,我可以减少。一旦我达到零并在那里呆了一段合理的时间,我知道我可以安全地关闭这些资源。以这种方式结束在我的应用程序中制作虚拟生命周期回调。所以无论你有多少任务或从哪里开始,这种方式都有效。如果您只能从一个地方运行和启动您的应用程序,而且所有内容都只采用单线性方式,那么根活动方法也是如此。
具体如下:
<强> BaseActivity 强>
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);
}
}
};
}
答案 1 :(得分:0)
通常,您应该关闭onDestroy()
或onStop()
中的数据库连接。在活动从内存中删除并销毁之前调用onDestroy()
。当您转到其他应用程序时,会调用onStop()
。两者都有效,但onDestroy()
通常更好,因为onStop()
会减慢应用切换速度。
更多信息:http://developer.android.com/training/basics/activity-lifecycle/starting.html