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的生存周期中被调用一次。
注:部分摘自其他资料