萌新Android笔记-activity生命周期篇

萌新的安卓笔记—1

生命周期篇:
android中的生命周期分为正常周期和异常状态下的周期。
正常周期有以下步骤

  1. onCreate: 表示Activity在被创建,一般用来做初始化工作,只在创建过程中调用一次。需要注意的是如果像getString这种获取资源的函数设置在onCreate中,那么只会在创建时读取一次数值。
  2. onRestart:表示andr正在重新启动。当Activity从不可见变为可见状态时调用
  3. onStart:表示Activity正在被启动,但还无法和用户交互,优先度上先于onResume
  4. onResume:表示Activi已经可见了,并且可以和用户交互。onResume可以用于制作页面切换时更新页面的功能。
  5. onPause:表示Activity正在被停止,正常情况下onStop就会被调用。如果新启动一个Activity,那么旧activity的onPause会先启动,再启动新activity的onCreate。有种极端情况是用户手速过快,在退出当前activity时快速切换回这个activity就会调用onResume。
  6. onStop:表示Activity即将停止,但不能在这里做太耗时的操作
  7. onDestroy:这是Activity最后一个回调,可以做一些回收工作和资源释放,就像解除广播的操作就可以在这里运行

总结:onCreate和onDestroy只可能调用一次,如果出现多次只可能是新建了activity,典型例子就是inflater函数,这玩意是新建一个activity,因此用setText这种操作UI界面函数是不会达到你的目标的,因为你想写的东西都跑到新建的activity上了,而且这个activity还不会跑到你的界面上。onResume和onPause是配对的,随着用户操作在不同activity间来回切换和屏幕设备的点亮和熄灭,会被调用多次。至于android为什么搞这么多接口,萌新的理解是onStart和onStop是针对页面的,如果只是想让客户看UI设计,可以在这两接口做文章,而onResume和onPause是针对功能的。虽然用起来这几个用法和效果看上去都一样,但还是有细微差别的。

异常状态下的生命周期

异常状态分为两种,一种是系统配置关系,就像旋转屏幕导致老activity被消灭,新的用于宽屏显示的activity生成,第二种就是内存不足导致activity被消灭

  1. 旋转屏幕这种异常终止情况下会调用onPause,onStop和onDestroy,同时调用onSaveInstanceState来保存activity的状态,将Bundle对象传给onRestoreInstanceState,调用时间在onStop之前。所以说onStop中不要做耗时操作,这种情况下就会导致信息丢失。重新生成activity后可以通过onRestoreInstanceState和onCreate来判断是否重建,onRestoreInstanceState调用时间在onStart之后。然而系统会给我们做一定的恢复工作,文本框上的文字,RecyclerView和ListView的滚动位置还是会保存的。但如果没有滚动条。。RelateLayout会被挤压成宽屏,FramLayout就会截下那点宽屏的位子。而如果你的activity中还有fragment的话,。。新建的fragment就会覆盖在老的fragment上面,两个同时出现在前台,带来糟糕的ui体验。关于fragment的生命周期萌新下次再讲。
    PS: 如果想对新生成的activity动手脚的话可以重写onSaveInstanceState和onRestoreInstanceState函数。—法外狂徒 张三

  2. 内存原因导致低优先级的activity被消灭
    这块情况初学者像本萌新还没遇到过。。有能力写出这么nx的app的也不用啃新手教程了,但了解还是免不了的,万一以后成大佬了呢。
    activity优先级如下
    1:正在和用户交互的activity
    2:非前台activity(例如弹出个popupwindow弹窗导致activity可见但无法交互
    3:后台activity(这些activity已被暂停,优先度最低)
    如果你的手机温度过高且未进过超限(物理升级)那么序号从低到高,手机要对你的app下手了。

总结:恢复机制很烦人,如果想摸鱼不希望系统重新创建activity,我们可以在AndroidMenifest中给activity指定configChanges属性,如下:
android:configChange=“orientation”
没错,就是那个Linear Layout布局中必定设置的定向属性
configChange可以定多个值用于不同情况,需要时就像萌新努力讨好度娘涯哥谷妹吧。

发布了1 篇原创文章 · 获赞 1 · 访问量 82

猜你喜欢

转载自blog.csdn.net/qq_43173045/article/details/104930418