zoukankan      html  css  js  c++  java
  • Android

      一、说明

    2012-2-2_1.png

        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中把需要长期保存的数据保存起来。

  • 相关阅读:
    如何编写gitignore文件
    【转】three.js详解之入门篇
    【转】Nginx反向代理和负载均衡
    【转】使用nvm快速搭建 Node.js 开发环境
    【转】npm包管理器那些事
    【转】用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程
    个人博客 总览
    【转】vscode: Visual Studio Code 常用快捷键
    【转】Cmder--Windows下命令行利器
    APScheduler+Flask
  • 原文地址:https://www.cnblogs.com/ShenJH/p/4380086.html
Copyright © 2011-2022 走看看