繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM