1

我有一个数据库单例,我想在应用程序完成时调用 .close() 。

我可以在 Application 类的 onCreate() 中调用数据库上的 .open(),但是在哪里调用 .close()?

4

2 回答 2

1

是的,我所做的是寻找前台活动。在每个前台活动结束后,我可以递减。一旦我达到零并在那里停留一段合理的时间,我知道我可以安全地关闭这些资源。最终以这种方式在我的应用程序中进行了虚拟生命周期回调。因此,无论您有多少任务或事情从哪里开始,这种方式都有效。如果你只能从一个地方运行和启动你的应用程序并且一切都只以单一的线性方式进行,那么是的,根活动方法也可以。

具体像这样:

基本活动

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);
         }
      }
   };

}
于 2012-10-21T19:24:24.560 回答
0

通常,您应该在onDestroy()或中关闭数据库连接onStop()onDestroy()在活动从内存中删除并销毁之前调用。onStop()当您转到不同的应用程序时调用。任何一个都可以,但onDestroy()通常会更好,因为onStop()会减慢应用程序的切换速度。

更多信息:http: //developer.android.com/training/basics/activity-lifecycle/starting.html

于 2012-10-21T18:25:55.290 回答