簡體   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