应用程序完成后,您的Application类如何知道?

时间:2012-10-21 16:54:58

标签: java android

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

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

2 个答案:

答案 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