Android开发艺术探索学习笔记之Activity(1)生命周期

来源:互联网 发布:知乎 毕业一年后 编辑:程序博客网 时间:2024/05/18 18:16

   网上买了本百度大神的书,进行一步一步的学习,把看书后的知识重温一遍,加深记忆。

   首先,对于每一个学习Android的人,我们都是重Activity开始学习的,那么我们今天就重Activity开始进行下一阶段的学习。从Activity的生命周期进行学习。Activity的生命周期分为两种情况;1、是在用户操作下进行的生命周期,这种生命周期是我们第一次学习Android开发时接触的,这种生命周期称为典型的生命周期。2、是系统回收Activity时,Activity发生的生命周期,这种生命周期我们称之为异常情况下的生命周期。那么我们就从这两点来分析Activity的生命周期吧。

一、典型情况下的生命周期:

1、onCreate();这个方法是oncreate()是当Activity创建时要执行的方法,在这方法中我们做一些初始化的工作,比如说:findviewById(),初始化变量啊,最重要的是setContentView()方法,加载一些资源等。

2、onStart();这个方法是当Activity已经被创建了已经被启动,但是Activity还处于后台也就是这个Activity还不能和用户进行交互的,Activity是可见了的但是是不能和用户进行交互的。

3、onRestart();可以解释为Activity被重新启动,也就是Activity经过onPause(),onStop();然后又被重新启动了这才会调用onResart()方法。注意:这个Activity并没有被销毁,销毁了Activity会被重新创建,会执行onCreate()-》onStart()-》onResume()-》onPause()-》onStop()-》onDestory()方法。

4.onResume();这个方法想当然就是这个Activity运行的时候就会调用这个方法,Activity出现在前台了并开始活动了,生命周期存在的意义就是了解Activity的生命周期,我们把对应的代码块写到Activity对应的方法里面,这样能达到程序运行的最佳效果。

5、onPause();表示Activity开始停止了,这个方法我们会对数据的一些处理,但是永远记住不能阻塞主线程。

6、onStop();这个方法是在onPause()运行之后,就是被暂停了可以做一些回收工作。

7、onDestory();这个方法是当Activity被销毁时调用,当然,这个方法我们就会对资源的一些释放,比如内存泄漏这些问题,我们都是可以在这里处理的。

二、异常情况下的生命周期:

1、当系统资源不充足时,简单的就是内存不足时我们的Activity会被回收并进行重启这种情况下生命周期是这样调用的,画个图吧,图比较好理解

这儿我们在进行描述一下,由于Activity是异常情况下被销毁的,那么系统就会调用onSaveInstaceState()方法来保存当前Activity的状态,这个方法的调用时机是onStop()方法之前的,这儿要注意的是如果不是异常情况下蹦的是不会调用onSaveInstaceAtate()方法的。之后系统会重新创建一个Activity,这二和正常情况下不一样的是当Activity启动后会调用onRestoreInstaceState()方法,并其把干掉的那个Activity保存的Bundle对象作为参数传递给onRestoreInstanceState()和onCreate()方法。而且系统还会为我们保存被销毁了的那个Activity的一些层次结构。比如当原来那个Activity还没被销毁时所处于的状态,当我们进行登录时,输入的文字啊listview滑到了那个地方,新的Activity启动时都会给我们恢复好。那是为什么呢,系统又是怎么恢复的呢,这儿我简单的进行了了解而且这里还是一个难点(记录一下),我就简单的说一下,下次写博客的时候再把这个问题解决了,首先是Activity会通知Window,然后Window会去通知Viewgroup,ViewGroup会去通知DecorView去一步一步实现的。这就是我们系统资源不足的时候造成的生命周期。

2.资源内存不足导致低优先级的Activity被杀死:

这种情况的数据存储的存储和第一种情况完全一致性的。那Activity的优先级又是怎么划分的呢,前台的Activity肯定要高点,就是和用户进行交互的Activity;其次是当我们的弹出一个对话框把Activity遮挡了,这时候Activity处于了可见状态但是非前台,无法和用户直接交互,这种Activity的优先级要低一些;另外一种Activity就是完全看不见,而且是处于后台的Activity优先级最低,当系统内存不足时,系统会优先干掉后台的Activity,这就是第二种情况。

那么我们来总结一下:如果我们的Activity被杀掉了,我们不想让系统再去重新创建者Activity,那我们可以设置Activity的configChanges属性,这个我在上一篇博客有介绍,如果有想了解的可以看一下我上一篇博客。







1 0
原创粉丝点击