歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android入門:Activity生命周期

Android入門:Activity生命周期

日期:2017/3/1 10:16:01   编辑:Linux編程

一、Activity生命周期介紹

我們在學Java Web時會學到Servlet的生命周期,因此對生命周期的概念已經有一定了解,簡單地說就是某個事物從出生到死亡的過程。

Activity也存在聲明周期,從Activity被創建到最後被銷毀;Activity運行時可能會受到一些突發事件的影響,例如在使用Activity時突然來了一個電話,則Activity需要在生命周期函數中設置;

下圖是Activity生命周期中最經典的圖:




7個生命周期方法:


(1)onCreate(Bundle bundle);創建Activity

(2)onStart();開啟Activity時調用

(3)onResume();在Activity顯示時調用

(4)onPause();在某個Activity被覆蓋,但是又沒有被完全覆蓋時調用

(5)onStop();在某個Activity被覆蓋時調用

(6)onRestart();在某個Activity被覆蓋後又重新顯示時調用

(7)onDestroy();最後銷毀時調用


這些方法總結後能夠有幾個規律:


(1)onCreate()-->onStart()-->onResume()為開始顯示Activity的過程

(2)onResume()-->onPause()為此Activity不在最前面,但是還是可見的過程

(3)onResume()-->onPause()-->onStop()為Activity被覆蓋的過程

(4)onPause()-->onResume()為Activity從原本可見但不是最前面到重新到最前面的過程

(5)onStop()-->onRestart()-->onStart()-->onResume()為Activity從不可見到顯示在最前面的過程


二、非生命周期但重要的方法


當應用遇到意外情況(如內存不足,用戶直接按home鍵等)需要保存一些臨時數據,比如你填寫EditText寫到一半,你按錯鍵了,按成home鍵,則如果默認情況,會丟失全部的輸入信息,但是這樣對用戶來說就會有損失,因此我們需要下面兩個方法:

1.onSaveInstanceState(Bundle bundle); 意外情況下保存數據

當意外發生時保存數據調用

由運行狀態進入暫停狀態或停止狀態調用

屏幕旋轉時調用

2.onRestoreInstanceState(Bundle bundle); 恢復數據


比如:



我們要做到保留EditText輸入的信息,因此代碼為:

  1. package com.xiazdong.activity.life;
  2. import Android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.EditText;
  5. public class MainActivity extends Activity {
  6. private EditText editText ;
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.main);
  11. editText = (EditText)this.findViewById(R.id.editText);
  12. }
  13. @Override
  14. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  15. String name = savedInstanceState.getString("name"); //恢復EditText的數據
  16. editText.setText(name);
  17. super.onRestoreInstanceState(savedInstanceState);
  18. }
  19. @Override
  20. protected void onSaveInstanceState(Bundle outState) { //保存EditText的數據
  21. outState.putString("name", editText.getText()+"");
  22. super.onSaveInstanceState(outState);
  23. }
  24. }

三、其他一些設置

<activity android:theme="@android:style/Theme.Dialog"/>可以將Activity設置成窗口模式;

Copyright © Linux教程網 All Rights Reserved