Android Activit生命周期方法

来源:互联网 发布:ips 知乎 编辑:程序博客网 时间:2024/06/10 19:11

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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);Log.i("info", "First activity onCreate");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onRestoreInstanceState(savedInstanceState);Log.i("info", "First activity onRestoreInstanceState");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i("info", "First activity onStart");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i("info", "First activity onResume");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i("info", "First activity onPause");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i("info", "First activity onStop");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i("info", "First activity onRestart");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);Log.i("info", "First activity onSaveInstanceState");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.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的生存周期中被调用一次。



注:部分摘自其他资料

0 0
原创粉丝点击