在本篇,我們想要瞭解onCreate()
與onStart()
之間的差異。
我們原本在 MainActivity class 立刻宣告已售出甜點數量(變數: dessertsSold)的初始化。
class MainActivity : AppCompatActivity(), LifecycleObserver {
private var revenue = 0
private var dessertsSold = 0
...
}
現在我們將dessertsSold = 0
移到不同的生命週期回調方法來觀察它們的差異。
先在onCreate()
加入dessertsSold = 0
。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.i("MainActivity", "onCreate called")
dessertsSold = 0
// Use Data Binding to get reference to the views
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
...
}
執行甜點應用程式後,我們先在畫面上點擊甜點,增加甜點售出數量、金額。
接著按下桌面鍵,再回到甜點應用程式,繼續在畫面上點擊甜點。
我們可以看到甜點售出數量、金額是在先前的紀錄數值上累加。看起來運作得很完美。
然後,我們把dessertsSold = 0
移至onStart()
。
override fun onStart() {
super.onStart()
dessertsSold = 0
Log.i("MainActivity", "onStart called")
}
接著按下桌面鍵,再回到甜點應用程式,繼續在畫面上點擊甜點。
這時候,情況不一樣了。在點擊畫面甜點後,已售出甜點數量(變數: dessertsSold)突然回到我只做了 1 個的狀態。
這是因為在按下桌面鍵後再回到甜點應用程式,應用程式從不可見->可見(visible),調用了onStart()
。將已售出甜點數量(變數: dessertsSold)重新設置為 0 。
onCreate()
只會在 Activity 第一次啟動時調用,將dessertsSold = 0
設置在onCreate()
比較能達到我們想要的使用者體驗。
當onPause()
、onStop()
、onDestory()
被調用,對於開發者的你而言,這是需要清理、釋放你不再使用資源的訊號。
當onCreate()
、onStart()
、onResume()
被調用,你可以撰寫程序來再次使用這些資源。
參考資料