Android:日常学习笔记(6)——探究活动(3)
Android:日常學習筆記(6)——探究活動(3)
活動的生命周期
返回棧
Android中的活動是可以疊加的,我們每啟動一個新活動,就會覆蓋在原來的活動上,點擊Back以后銷毀最上面的活動,下面的活動就會重新顯現出來。Android是使用任務(Task)來管理活動的,一個任務就是一組存放在棧里的活動的集合。
默認情況下,每當我們啟動一個新的活動,他會在返回棧中入棧,并處于棧頂位置。而每當我們按下Back或者Finish以后,處于棧頂位置的活動會出棧。
活動的狀態
運行狀態(棧頂的元素)、暫停狀態(不在棧頂但仍然可見,如對話框)、停止狀態(不在棧頂并完全不可見,有可能被系統回收)、銷毀狀態(從返回棧中移除后)。
活動的生存期
? onCreate():他會在活動第一次被調用的時候創建。
? onStart():活動由不可見變為可見時調用。
? onResume():活動準備好與用戶進行交互時調用,此時活動一定位于返回棧的棧頂。并處于運行狀態。
? onPause():在系統準備好去啟動或者恢復另一個活動的時候調用,一般在此將一些消耗CPU的資源釋放掉。
? onStop():這個方法在活動完全不可見的時候調用。
? onDestory():這個方法在活動被銷毀之前調用。
? onRestart():這個方法在活動由停止轉變為運行狀態之前調用,也即是活動被重新啟動了。
體驗活動的生命周期
1.我們新建三個活動
說明:
對話框活動我們需要在AndroidManifest中進行設置。?
2.在主活動中設置啟動其余活動,且重載生存期方法
package com.example.zy.android2;import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button startNormal = (Button) findViewById(R.id.start_normal_activity);Button startDialog = (Button) findViewById(R.id.start_dialog_activity);startNormal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, NormalActivity.class);startActivity(intent);}});startDialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, DialogActivity.class);startActivity(intent);}});}protected void onStart(){super.onStart();Log.d("Main","onStart");}protected void onResume(){super.onResume();Log.d("Main","onResume");}protected void onPause(){super.onPause();;Log.d("Main","onPause");}protected void onStop(){super.onStop();Log.d("Main","onStop");}protected void onDestroy(){super.onDestroy();Log.d("Main","onDestroy");}protected void onRestart(){super.onRestart();Log.d("Main","onRestart");}} 3.運行程序 我們發現:
當首次運行程序時會打印
03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onCreate
03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onStart
03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onResume
點擊第一個按鈕會打印:
03-19 14:37:20.270 3632-3632/com.example.zy.android2 D/Main: onPause
03-19 14:37:20.733 3632-3632/com.example.zy.android2 D/Main: onStop
說明:由于NormalActivity活動會完全遮擋Main活動,所以這兩個方法完全執行。
返回后打印:
03-19 14:38:11.040 3632-3632/com.example.zy.android2 D/Main: onRestart
03-19 14:38:11.041 3632-3632/com.example.zy.android2 D/Main: onStart
03-19 14:38:11.041 3632-3632/com.example.zy.android2 D/Main: onResume
說明:由于之前Main活動進入停止狀態,所以onRestart()方法會得到執行,之后又會依次調用onStart()和onResume()。
點擊第二個按鈕:
03-19 14:39:17.338 3632-3632/com.example.zy.android2 D/Main: onPause
說明:沒有執行onStop,是因為Dialog沒有完全遮擋住MainActivity,此時MainActivity只是進入了暫停狀態,并沒有停止狀態。
返回后打印:
03-19 14:39:21.519 3632-3632/com.example.zy.android2 D/Main: onResume
退出MainActivity
03-19 14:39:49.763 3632-3632/com.example.zy.android2 D/Main: onPause
03-19 14:39:49.772 3632-3632/com.example.zy.android2 D/Main: onStop
03-19 14:39:49.772 3632-3632/com.example.zy.android2 D/Main: onDestroy
活動被回收了怎么辦
當活動A基礎上啟動了活動B,那么A進入停止狀態,就有可能被系統回收。如果活動A中我們輸入了臨時數據,那么當從活動B返回時,由于重新執行了onCreate()方法,數據將得不到保存。
Activity提供了一個onSaveInstanceState()回調方法,這個方法可以保證數據回收之前一定被調用,因此我們可以利用這個方法來解決互動被回收時臨時數據得不到保存的問題。
?
轉載于:https://www.cnblogs.com/MrSaver/p/6580655.html
總結
以上是生活随笔為你收集整理的Android:日常学习笔记(6)——探究活动(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS基础---日记4
- 下一篇: Android攻城狮SurfaceVie