#Activity的生命周期

一、概述
Activity是学习android的一个重要的组件,理解好Activity的生命周期是十分重要的

  • 1、单个Activity的生命周期
  • 2、俩个Activity交互的生命周期
  • 3、实际开发时的主意点

1、单个Activity的生命周期

 1、当一个Activity启动时,先调用onCreate()方法进行View的初始化工作,然后调用 onStart()方法让界面可见,然后调用onResume()方法用户可以进行交互。
 2、当当前Activity被打断,返回home页时,会调用OnPuase()方法,极端情况下也会调用onStop(),当这个Activity重新返回时,会调用onRestart()方法,然后调用onStart()方法,onResume()方法。

启动时执行顺序
1、onCreate()
2、onStart()
3、onResume()
被打断执行
4、onPause()
5、onStop()
重新再次启动时调用or没有重新被启动执行9、onDestroy()方法
6、onRestart()
7、onStart()
8、onResume()

11、测试代码如下
public class MainActivity extends AppCompatActivity {

public static final String TAG = "Text" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.i(TAG," i am onCreate");
}


@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);
    Log.i(TAG, " i am onSaveInstanceState");
}

@Override
protected void onStart() {
    super.onStart();
    Log.i(TAG,"I am onStart");
}


@Override
protected void onResume() {
    super.onResume();
    Log.i(TAG,"I am OnResume");
}


@Override
protected void onPause() {
    super.onPause();
    Log.i(TAG," I am onPause");
}


@Override
protected void onStop() {
    super.onStop();
    Log.i(TAG,"I am OnStop");
}


@Override
protected void onRestart() {
    super.onRestart();
    Log.i(TAG,"I am onRestart");
}


@Override
protected void onDestroy() {
    super.onDestroy();
    Log.i(TAG," I am onDestroy");

}

}

打印结果为
打印结果为

二、当俩个Activity交互时的生命周期

1、当启动在一个Activity A中启动另外一个Activity B时,首先执行A的onPause()方法,然后执行B的onCreate()方法,然后B的onStart(),B的onResume()方法,再A的onStop()方法。
2、当在B时,按下Back键时,首先执行B的onPause()方法,然后执行A的Restart()方法,A的onStart()方法,A的onResume()方法,再是B的onStop()方法,再调用B的onDestroy()方法

测试结果为
这里写图片描述

三、其他示例
父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onStart(),onResume() …
用户点击Home,Actvity调用顺序如下
onCreate()
onStart()
onResume()
onPause()
onStop() – Maybe
onDestroy() – Maybe
调用finish(), Activity调用顺序如下:
onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
在Activity上显示dialog, Activity调用顺序如下:
onCreate()
onStart()
onResume()
在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下:
onCreate()
onStart()
onResume()
onPause()
设备进入睡眠状态,Activity调用顺序如下:
onCreate()
onStart()
onResume()
onPause()

四、开发时的注意事项

一、Activity完整的生命周期
 1、完整的Activity生命周期之间从调用的OnCreate开始,到调用onDestroy结束。有可能在某些情况下,一个Activity被终止时并不调用onDestroy方法。
 2、使用OnCreate方法来初始化你的Activity:初始化的用户界面,分配引用类变量,绑定数据控件,并创建服务和线程。在OnCreate方法传递的对象Bundle包含最后一次调用onSaveInstanceState保存的UI状态。你可以使用这个Bundle恢复用户界面到以前的状态,无论是在OnCreate方法或通过覆盖onRestoreInstanceStateMethod方法。
 3、覆盖onDestroy方法来清理OnCreate中创建的任何资源,并确保所有外部连接被关闭,例如网络或数据库的联系。
 4、为了避免创造短期对象和增加垃圾收集的时间,以致对用户体验产生直接影响。如果你的Activity需要创建一些对象的话,最好在onCreate方法中创建,因为它仅调用一次在一个Actvity的完整生命周期中。

 一个Activity可见的生命周期始于OnStart调用,结束于OnStop调用。在这两个方法中间,你的Actvity将会对用户是可见的,尽管它可能没有焦点,也可能部分被遮挡着。在一个Activity完整的生命周期中可能会经过几个Activity可见的生命周期,因为你的Activity可能会经常在前台和后台之间切换。在极端情况下,OPhone Runtime将杀掉一个Activity即使它在可见状态并且并不调用onStop方法。

 二、Activity可见的生命周期
   1、一个Activity可见的生命周期始于OnStart调用,结束于OnStop调用。在这两个方法中间,你的Actvity将会对用户是可见的,尽管它可能没有焦点,也可能部分被遮挡着。在一个Activity完整的生命周期中可能会经过几个Activity可见的生命周期,因为你的Activity可能会经常在前台和后台之间切换。在极端情况下,OPhone Runtime将杀掉一个Activity即使它在可见状态并且并不调用onStop方法。
  2、OnStop方法用于暂停或停止动画,线程,定时器,服务或其他专门用于更新用户界面程序。当用户界面是再次可见时,使用OnStart(或onRestart)方法来恢复或重新启动这些程序,。
3、onRestart方法优先于onStart被调用当一个Activity被重现可见时,使用它你可以实现一些Activity重新可见时的特殊的处理。

OnStart / OnStop方法也被用来注册和注销专门用于更新用户界面Intent接收者。

 三、Activity活跃的生命周期
 1、一个Activity活跃的生命周期始于OnResume调用,结束于OnPause调用。一个活跃的Actvity总是在前台并且接收用户输入事件。当一个新的Actvity启动,或该设备进入休眠状态,或失去焦点,Activity活跃的生命周期就结束了。尽量在onPause和onResume方法中执行较量轻的代码以确保您的应用程序能够快速响应Acitvity在前台和后台之间切换。
 2、在调用onPause之前,onSaveInstanceState会被调用。这个方法提供了一个机会保存当前的UI状态到Bundle当中。 Bundle信息将会被传递到       
 3、OnCreate和onRestoreInstanceState方法。使用onSaveInstanceState保存UI状态(如检查按钮状态,用户焦点,未提交用户输入)能够确保目前相同的用户界面当Activity下次被激活时。在Activity活跃生命周期中,你可以安全地认为onSaveInstanceState和onPause将被调到即使当前进程将终止。

这里写图片描述

部分来源:http://www.jdzhao.com/component/show_4_112.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值