Android Activit生命週期方法
Activity的生命週期方法不需要開發者呼叫,框架會自動來呼叫這些方法,理解Activity的生命週期及這些方法可以對我們的開發有很大的幫助。
首先建立一個工程,然後重寫Acitvity的各個生命週期方法,在裡邊用Log輸入當前方法名
package com.example.activitytest;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
Log.i("info", "First activity onCreate");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.i("info", "First activity onRestoreInstanceState");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i("info", "First activity onStart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i("info", "First activity onResume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i("info", "First activity onPause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i("info", "First activity onStop");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i("info", "First activity onRestart");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
Log.i("info", "First activity onSaveInstanceState");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("info", "First activity onDestroy");
}
}
執行程式碼,可以看到在Logcat裡列印出“First activity onCreate”→“First activity onStart”→“First activity onResume”,可以看到執行順序為“oncreate”,"onstart",“onResume”,當按電源鍵關閉螢幕或者按“home”鍵切換的桌面的時候,會呼叫“First activity onPause”→"First activity onSaveInstanceState"→"First activity onStop"。當前Activity處於半透明或在完全不可見之前會呼叫onPause方法,在此之後會呼叫onSaveInstanceState來儲存當前Activity的狀態,最後再呼叫onStop方法,此時該Activity已經完全不可見。注意:此時該Actvity並沒有被銷燬。當我們再次點選程式圖示的時候就會執行“First activity onRestart”→"First activity onStart"→“”First activity onResume。現在可以看一下程式跟第一次執行時的不同,在第一次執行時首先會執行“oncreate”方法,並沒有執行“onrestart”方法,當程式切到後臺,再次切回來的時候發現“oncreate”並沒有執行,“onrestart”執行了。所以我們在寫程式碼的時候要考慮哪些程式碼應該寫在onCreate裡,哪些應該寫在onRestart裡。
當我們在Activity的可見狀態下按“back”鍵,會執行“First activity onPause”→"First activity onStop"→“First activity onDestroy”,此時Activity被銷燬,該Activity的生命週期結束。
Activity的完整生存週期是指對oncreate方法的第一次呼叫和對ondestroy方法的最後一次呼叫之間的時間範圍。有時候還會發生一個Activity的程式被終止,卻沒有呼叫onDestroy方法的情況。
使用oncreate方法來初始化Activity:填充使用者介面,得到對Fragment的引用,分配對類變數的引用,將資料繫結到控制元件,並啟動Service和定時器。如果Activity被執行時意外終止,oncreate方法接受一個包含UI狀態的Bundle物件,該物件是在最後一次呼叫onSaveInstanceState時儲存的,應該使用這個Bundle將UI恢復為上一次的狀態,這裡既可以通過oncrate方法,也可以通過重寫onRestoreInstanceState來實現。
通過ondestroy方法來清理oncreate建立的所有資源,並保證所有的外部連線(例如,網路或者資料庫連線)都關閉了。
作為使用Android編寫高效程式碼的指導原則的一部分,我們建議最好避免建立短期物件。物件的快速建立和銷燬會導致額外的垃圾收集過程,而這個過程會對使用者體驗產生直接的影響。如果Activity是有規律地建立相同的物件集,那麼可以考慮在oncreate方法中建立他們,因為它只在Activity的生存週期中被呼叫一次。
注:部分摘自其他資料
相關文章
- Android Activity生命週期Android
- Android之各生命週期Android
- Android Service生命週期淺析Android
- Flutter仿Android生命週期LifecycleStateFlutterAndroid
- Servlet生命週期與方法Servlet
- Android Service生命週期 Service裡面的onStartCommand()方法詳解Android
- Android View的生命週期詳解AndroidView
- Android 監聽生命週期工具庫Android
- Android中元件生命週期完全解析Android元件
- Android全面解析之Activity生命週期Android
- Android Activity生命週期的一點感悟Android
- Android知識重溫之生命週期Android
- Android生命週期元件Lifecycle使用詳解Android元件
- Android:聊聊 MVP 中 Presenter 的生命週期AndroidMVP
- 開發方法---軟體生命週期
- [譯]如何使用React生命週期方法React
- 生命週期
- 擼擼Android的羊毛(二)----Activity生命週期Android
- View生命週期與Activity生命週期的關係View
- API版本控制的生命週期方法 - nordicapisAPI
- vue - 生命週期Vue
- Fragment生命週期Fragment
- vue生命週期Vue
- spring生命週期Spring
- ubuntu生命週期Ubuntu
- Flutter - 生命週期Flutter
- sessionStorag 生命週期Session
- PHP 生命週期PHP
- maven生命週期Maven
- Activity生命週期
- React生命週期React
- Salesforce 生命週期管理(一)應用生命週期淺談Salesforce
- Android | Activity和Fragment最全生命週期+發現大牛AndroidFragment
- Android入門教程之Activity(生命週期,啟動...)Android
- vue 生命週期梳理Vue
- java servlet 生命週期JavaServlet
- Activity生命週期onDestroy
- React-生命週期React
- IOC與生命週期