• Android应用开发提高系列(6)——Activity生命周期


     

    前言

      四大应用程序组件中Activity是最常用的,也是必须掌握的一个组件。这里分几章梳理归纳一些实用的知识点与大家分享。


    声明

      欢迎转载,但请保留文章原始出处:) 

        博客园:http://www.cnblogs.com

        农民伯伯: http://over140.cnblogs.com
    正文

      一、配图及说明

        

        Activity主要的三种状态:

          Running(运行):在屏幕前台(位于当前任务堆栈的顶部)

          Paused(暂停):失去焦点但仍然对用户可见(覆盖Activity可能是透明或未完全遮挡)

          Stopped(停止):完全被另一个Activity覆盖

      二、事件方法链

        2.1  进入Activity

          onCreate  -> onStart  ->  onResume

        2.2  BACK键

          onPause -> onStop -> onDestroy

        2.3  HOME键
          Home键退出:onPause -> onStop 
          Home键回来:onRestart ->  onStart -> onResume  

        2.4  休眠/恢复

          休眠:  onPause

          恢复:  onResume

        2.5  旋转屏幕

          未设置android:configChanges:

            onPause  ->  onStop  ->  onDestory  ->  onCreate  -> onStart  ->  onResume 

          设置了android:configChanges="orientation|keyboardHidden":

              不会触发生命周期方法,参见文章这里。 

        2.6  来电

          来电,显示来电界面:

            onPause  ->  onStop

          关闭电话界面,重新回到当前Activity:

            onRestart ->  onStart -> onResume

        2.7  其他Activity 

          进入下一个Activity:

            onPause  ->  onStop

          从其他Activity返回至当前Acitivity:

            onRestart ->  onStart -> onResume

      三、与Activity生命周期结合的应用场景

        3.1  与广播(Broadcast)结合 

          在onResume注册广播(registerLinstener),在onPause注销广播(unregisterLinstener)。 例如:

          做"摇一摇"功能(传感器)、监听网络变化,就可以在onResume中注册监听,在onPause里注销掉,已节省资源提高效率。

        3.2  与服务(Service)结合

          在onStart绑定服务(bindService),在onStop中取消绑定(unbindService)。 例如: 

          需要通过Service定时更新UI上的数据,而Activity的可见周期在onStart与onStop之间,那么就可以再onStart时启动服务,在onStop时停止服务。为了节约系统资源,除了提高用户体验以外,开发人员应尽可能的优化程序。

        3.3  与Cursor结合

          使用managedQuery让Activity帮你管理Cursor的生命周期,不用自己去close。但也有一些问题,补充两篇文章:这里1、 这里2

        3.4  释放资源

          可以在onDestory中释放一些资源。比如可以在onDestory时调用MediaPlayer的release。

      四、注意

        4.1  所有Activity生命周期方法的实现都必须先调用其父类版本。

        4.2  由于Activity经常会暂停和恢复之间切换,所以onResume和onPause这两个方法应当是轻量级的。

        4.3  在系统再某种紧急情况下需要回收内存,onStop、onDestory可能不会被调用,因此需要在onPause中把需要长期保存的数据保存起来。

      

      五、相关文章

        [Android中文Wiki] 开发者指南Activities

        理解Activity寿命

        两分钟彻底让你明白Android Activity生命周期(图文)!

        android生命周期函数大全

    结束

      要写的内容很多,同样这方面的文章也很多,仍然建议大家仔细的看Activity的API和开发者指南。 

  • 相关阅读:
    C# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/over140/p/2331185.html
Copyright © 2020-2023  润新知