我有一个数据库单例,我想在应用程序完成时对其调用 .close()。
我可以在 Application 类的 onCreate() 中对数据库调用 .open(),但是我在哪里调用 .close()?
最佳答案
是的,我所做的是寻找前景 Activity 。在每个前台 Activity 结束后,我可以递减。一旦我达到零并在那里停留了一段合理的时间,我就知道我可以安全地关闭这些资源。最终以这种方式在我的应用程序中进行虚拟生命周期回调。因此,无论您有多少任务或事情从哪里开始,这种方式都有效。如果您只能从一个地方运行和启动您的应用程序,并且一切都只以单一线性方式进行,那么根 Activity 方法也可以。
具体是这样的:
基础 Activity
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);
}
}
};
}
关于java - 您的应用程序类如何知道应用程序何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999996/