[英]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.