美文网首页
浅谈Activity

浅谈Activity

作者: QingDianFan | 来源:发表于2019-09-27 16:33 被阅读0次

对于Android开发者来说activity的生命周期是再熟悉不过的东西了,对于下面这张图也是再熟悉不过了;


生命周期.png

从activity的创建到销毁,会走onCreate()、onStart()、onResume()、onPause()、onStop()、onDestory()等生命周期,
对于开发者来说充分理解activity的生命周期可以在适当的回调方法中进行业务逻辑处理;
下面就让我们了解一下activity的生命周期:

1.Activity的四种状态

Android程序中,Activity是程序和用户交互的界面,在系统中存在四种状态:Running, Paused, Stopped,Killed。

        Running是指Activity在系统中获得焦点的状态,此时用户可以与该程序进行交互,对程序进行直接操作。

        Paused 是指Activity在系统中未获得焦点,但对用户来说仍然可视的状态,该Activity上层可能有一个透明、
              对于用户不可见的Activity层或者有一个Dialog样式的Activity层,都会让Activity进入Paused状态。此状态下该Activity无法和用户进行直接交互。

        Stopped是当该Activity在系统中失去焦点并且上层存在不透明的、非Dialog样式的Activity(即对用户不可视)的状态。
               此状态下,该Activity的数据毁在RAM中暂时保留,但是,一旦系统需要内存,这种处于Stopped状态的Activity占用的RAM空间会优先被清理并重新利用。
               所以,在Activity处于Stopped状态时,必须要保存该Activity的UI状态,否则一旦RAM空间被重新利用,UI状态和数据就完全丢失。

        Killed是指Activity在RAM中被移除或者说关闭的状态。也就是说此时Activity处于关闭的状态,不占用RAM空间。

2.Activity的生命周期

  onCreate()——————Activity开始创建的时候(Activity生命周期的第一个方法,我们主要将一些初始化的工作放在oncreate方法中,比如setContentView(),
                  虽然可以将一些无关的操作放在onCreate方法中但是这些是不规范的,因为此时Activity还在后台,是不可见的,
                  所以动画之类的初始化操作不应该放在onCreate方法中)

  onStart()——————Activity正在被动时(此时Actviity已经是可见了但是还在后台,用户还无法交互,初始化的操作也可以放在这里,
                  但是官方推荐所以将初始化放在onCreate方法中,)

  onResum()——————Activity启动完成(此时Activity已经出现在前台,并且为可见状态,当B做完操作返回A时可以在在此方法实现界面的刷新)


  onPause()——————Activity暂停状态(此时Activity已经不在栈顶了,但我们还是可以看到Activity,并不是因为每一个Activity都会占满全屏幕,
                  有一些弹框的样式也是可以通过Activity来显示,它只是占据屏幕的中间部分,而且在onPause方法中不可以做耗时操作,
                  当A跳转到B时,A的生命周期会先走onPause只会才会走B的生命周期,所以在onPause中做耗时操作有可能会造成ANR,造成应用强制关闭)

  onStop()——————Activity停止(此时的Activity已经不可见了,但是Activity的对象还在内存中,可以在onStop中进行资源的回收)

  onRestart()——————Activity重新启动(当用户在Activity界面点击Home再次进入Activity会第一时间调用onRestart,所以我们在onRestart中一般不做任何操作)

  onDestory()——————Activity销毁(这个时候Activity将会被销毁,而且Activity也会处于不可见的状态,可以将没有在onStop中释放的资源,在这里及时释放,也可以进行一些回收的工作)

3.部分实例列举

1.打开Activity时的生命周期
启动a.png
2.按返回键时Activity的生命周期
息屏.png
3.当屏幕旋转时Activity走的生命周期

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

activity不走生命周期

当不设置android:configChanges时:


旋转屏幕.png
4.当按下Home键时
home键.png
4.按下Home键再次开启时
按下home键后再次开启.png

2)两个Activity进行交互

1.当按下A 跳B时
a跳b.png
2.当按下B返回A时
b返回a.png

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

4.1与广播(Broadcast)结合

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

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

4..2与服务(Service)结合

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

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

4..3释放资源

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

5.Activity中onSaveInstanceState()和onRestoreInstanceState()

onSaveInstanceState函数在Activity生命周期中执行。

outState 参数作用 :
数据保存 : Activity 声明周期结束的时候, 需要保存 Activity 状态的时候, 会将要保存的数据使用键值对的形式 保存在 Bundle 对象中;

调用时机 :
Activity 被销毁的时候调用, 也可能没有销毁就调用了;
按下Home键 : Activity 进入了后台, 此时会调用该方法;
按下电源键 : 屏幕关闭, Activity 进入后台;
启动其它 Activity : Activity 被压入了任务栈的栈底;
横竖屏切换 : 会销毁当前 Activity 并重新创建;

onSaveInstanceState方法调用注意事项 :
用户主动销毁不会调用 : 当用户点击回退键 或者 调用了 finish() 方法, 不会调用该方法;
调用时机不固定 : 该方法一定是在 onStop() 方法之前调用, 但是不确定是在 onPause() 方法之前 还是 之后调用;
布局中组件状态存储 : 每个组件都 实现了 onSaveInstance() 方法, 在调用函数的时候, 会自动保存组件的状态, 注意, 只有有 id 的组件才会保存;
关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现 组件状态保存的;

onRestoreInstanceState(Bundle outState):

方法回调时机 : 在 Activity 被系统销毁之后 恢复 Activity 时被调用, 只有销毁了之后重建的时候才调用, 如果内存充足, 系统没有销毁这个 Activity, 就不需要调用;
– Bundle 对象传递 : 该方法保存的 Bundle 对象在 Activity 恢复的时候也会通过参数传递到 onCreate() 方法中;

相关文章

  • 浅谈Activity

    对于Android开发者来说activity的生命周期是再熟悉不过的东西了,对于下面这张图也是再熟悉不过了; 从a...

  • Activity从建立到显示、一些问题

    浅谈Activity从建立到显示: 1,Activity 是一个组件:掌控着一群View控件的逻辑和生命周期 2,...

  • 浅谈activity launch mode

    android 使用了activity stack 来管理activity .其中一个task 对应了一个acti...

  • 浅谈activity创建以及activity、window、vi

    最近又看了一遍activity的生命周期,相较于毕业初死记硬背的应试思维,现在更多的是想生命周期中的每个节点都做了...

  • 浅谈Activity 启动过程

    引言:页面启动时间怎么计算? 在做启动优化的过程中,在做了一堆的优化工作之后,需要对整个的启动优化效果进行对比和评...

  • Android Activity生命周期浅谈

    今天和大家讨论一下Android中Activity的生命周期,虽然网上有很多文章都有介绍,但是大多解释的不是很详尽...

  • 浅谈 iOS 中的 Activity Indicator

    Activity Indicator 是iOS开发中必不可少的一个视图。本文就简单地总结一下这个Activity ...

  • android Activity 生命周期浅谈

    Android生命周期方法是贯穿Android 程序运行始末的核心方法。Activity,Service,Frag...

  • 2020-07-02

    浅谈 浅谈模块设计宏内核 浅谈接口设计Flags 浅谈稳定性设计重试 浅谈人员业务结构设计矩阵式 浅谈接口设计 |...

  • 浅谈Filecoin(二)

    浅谈Filecoin(二) 浅谈Filecoin(一)链接:浅谈Filecoin(一) (Verifiable)M...

网友评论

      本文标题:浅谈Activity

      本文链接:https://www.haomeiwen.com/subject/ircnjctx.html