zoukankan      html  css  js  c++  java
  • Android Activity生命周期

    最近做的东西中,需要加入播放音乐的功能。只有Activity在Running状态下才能播放,按Home键或者返回键,音乐要暂停,当回到应用中,
    音乐要继续播放。所以,这就需要熟悉Activity的生命周期,在合适的状态下Override其状态方法,才能达到效果。在网上一番查询,将自己的
    理解与笔记 记录如下。(这不是纯原创,大多知识来源于网络,只是用我自己的话写下来而已,为了加深印象)。


    一、activity的所有状态过程
        onCreate (-->onRestart)-->onStart (-->onRestoreInstanceState) -->onResume -->onSave -->onPause -->onStop (-->onSaveInstanceState)-->onDestory
        
        从onResume开始到onStop 这段期间,activity都是可见的。
        
        但是 这个流程并不是都走完,而是可能从某一部分开始(除了第一次启动),到某一部分结束。下面就说一下,各种情况的执行流程。
        1、进入activity(第一次启动)
           onCreate -->onStart -->onResume
        2、按返回键后
            onPause -->onStop -->onDestory
        3、按Home键后
           Home键退出:onPause -->onStop (-->onSaveInstanceState)
           Home键回来:onRestart -->onStart -->onResume
        4、休眠/恢复
           休眠:onPause
           恢复:onResume
        5、旋转屏幕
           未设置android:configchanges
           onPause -->onStop -->onDestory -->onCreate -->onStart
           设置android:configchanges:"orientation|keyboardHidden";
           不会触发生命周期方法
        6、来电话
           来电,显示来电界面
               onPause -->onStop
           关闭来电界面
                onRestart -->onStart -->onResume
        7、进入另一个activity
            onPause -->onStop (-->onSaveInstanceState)
        8、从其他activity返回到当前activity
             (-->onRestart) -->onStart (-->onRestoreInstanceState) -->onResume
             
    二、关于onSaveInstanceState何时调用(摘自网络 根据谷歌文档翻译的 内容)
        该方法为我们提供在某些情况下,保存Activity信息的机会,但是这个方法并不是什么时候都调用的。
        该方法有一个参数类型 bundle 用来存储要保存的数据,之后会传给inCreate或者onRestoreInstanceState()
        这个方法在一个activity被杀死前被调用,当该activity在将来某个时刻回来时可以恢复其先前的状态。就像 上面 的第7个 进入另一个activity
        从A activity 进入到 B activity,如果在某个时刻系统因为回收资源的问题把A杀掉了,那么A就有机会调用该方法去保存当前信息,若没有把A杀掉
        就不会调用该方法,但是从B回到A时,B永远不会调用该方法,因为永远不会返回到B。
        
    三、验证
        看完了东西就要验证一下
        
        下面直接给出验证结果
        只有一个activity的情况下,按Home键会执行onSaveInstanceState方法,按返回键不会执行。
        按Home键后,再按应用图标进入应用,不会从 onCreate 中获取到  onSaveInstanceState 传来的值。因为 这时并没有执行onCreate方法,而是执行了
        onRestart -->onStart -->onResume。
        这样来讲onSaveInstanceState 方法并不是在 系统回收的时候才会调用,只要activity 执行onstop后就会执行它。也就是说 这个方法可以提供了一个参数可以携带

        一些信息等到下次恢复的时候可以获取使用。也不知道这么理解对不对。

    另外 快速加入override方法

    在eclipse的代码编辑区空白处 右键--source--Override/ImplementMethods... --选择相应的你要覆盖的方法 --ok。注意不要删除生成的方法内的 super,否则会出错。因为super是引用父类的那个方法,你覆盖只写了你想附加的功能,但是这个方法的原来的功能就要调用父类的去做。(理解有误的话请指正)

        
        本文 有些内容摘自其他博客,但是都没有赋值粘贴,而是记载我的笔记本上又敲了一遍键盘。如果理解错误还请指正。
  • 相关阅读:
    SVM学习笔记-线性支撑向量机
    阿里面试回来,想和Java程序员谈一谈
    看外国女程序员如何直播写代码
    shoeBox超实用的雪碧图(Sprite)图制作工具-使用
    Android图像处理之图形特效处理
    SMP、NUMA、MPP体系结构介绍
    TIOBE 2017 8月编程语言排行榜 后院“硝烟四起”
    Android Studio中Git和GitHub使用详解
    矩阵乘法快速幂 codevs 1574 广义斐波那契数列
    矩阵乘法 codevs 1287 矩阵乘法
  • 原文地址:https://www.cnblogs.com/doDrop/p/4143813.html
Copyright © 2011-2022 走看看