歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android入門:Activity生命周期

一、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.   
  3. import Android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.EditText;  
  6.   
  7. public class MainActivity extends Activity {  
  8.     private EditText editText ;  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         editText = (EditText)this.findViewById(R.id.editText);  
  14.     }  
  15.   
  16.     @Override  
  17.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  18.         String name = savedInstanceState.getString("name"); //恢復EditText的數據   
  19.         editText.setText(name);  
  20.         super.onRestoreInstanceState(savedInstanceState);  
  21.     }  
  22.   
  23.     @Override  
  24.     protected void onSaveInstanceState(Bundle outState) {   //保存EditText的數據   
  25.         outState.putString("name", editText.getText()+"");  
  26.         super.onSaveInstanceState(outState);  
  27.     }  
  28.       
  29. }  

三、其他一些設置

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

Copyright © Linux教程網 All Rights Reserved