zoukankan      html  css  js  c++  java
  • Activity-生命周期和启动模式

    学习Android的第一天就需要了解的知识,然而,以前我小看这些基础知识了,一知半解吃大亏。所谓不积跬步,无以至千里,打好基础是很重要的。从这一篇文章开始,重新学习Android。

    要想使用Activity,首先要创建它。对于开发者,都知道是通过清单文件声明一个已有Activity的路径,然后要么通过startActivity之类的方法跳转要么通过<intent-filter></intent-filter>声明为默认启动。其实创建Activity并启动这一过程是系统行为,你可以new出来一个Activity实例,因为它的构造器不是private的,但你无法启动它。所以了解Activity,是要了解系统如何管理它的。不过在这之前,还是要简单介绍下它的生命周期和启动模式,因为这是使用的的初步。

    onCreate:表示Activity正在被创建,这时候可以做些初始化的工作,比如加载界面布局-setContentView(int resId),当然你要愿意也可以在onStart或者onResume,只是也没几个会这么做罢了。

     onRestart:在Activity已停止并即将再次启动前调用。始终后接onStart。

    onStart:Activity已经启动,但还无法与用户交互。注意,根据对称关系,如果你在这个方法里做了一些绑定操作,比如注册了一个广播,那么取消注册则需要放在onStop里,不能放在onDestory中。如果 Activity 转入前台,则后接 onResume(),如果 Activity 转入隐藏状态,则后接 onStop()

    onResume:在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。始终后接 onPause()

    onPause:表示Activity出于可见但不可交互状态,此时生命周期变化有两种可能,要么重新变回onResume,要么回调到onStop。比如当一个新的Activity出现在了当前Activity之上,但新Activity是透明的,或者是一个对话框形式,那么原Activity就会保持onPause不变。

    onStop:表示Activity已经停止。界面已经不可见了, Activity的实例还保留在内存中,但与onPause不同的,它已经不再可见了,官网文档说此时已不再与窗口管理器连接。在需要时,可能会被系统回收以腾出空间。

    onDestory:在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人对 Activity 调用了 finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。

    Activity从创建到销毁,中间经历了onCreate->onDestroy的过程,中间的onStart,onResume,onPause,onStop一般情况是肯定会执行的。用户的不同操作会导致的周期变化,且在不同的情况下会呈现不同的结果。常用的操作与对应的周期变化如下:

    • 用户第一次打开一个Activity:onCreate->onStart->onResume;而如果再次回到该Activity时,回调是:onRestart->onStart->onResume。再次回到的可以是点击返回键返回到原Activity,也可以是在原Activity设置了launchMode="singleTask"或者launchMode="singleInstance"然后从其他Activity 重新startActivity。
    • 用户从当前Activity进入另一个Activity或者用户点击了Home或者熄灭了屏幕,该Activity的生命周期是到onStop为止。如果该Activity被回收或者应用进程被杀掉,则会回调onDestroy。
    • 用户从当前Activity返回,当前Activity的生命周期变化是:onPause->onStop->onDestroy。这里的返回可以是点击返回键,可以是调用onBackPressed()
    • 用户调用了finish()方法意图结束当前Activity,生命周期变化是:onPause->onStop-onDestroy。

    不一般情况呢。比如如果你在onCreate()中立马调用finish(),那么生命周期就是onCreate->onDestory。很少有人会这么做。有一种情况是当你的 Activity 作为临时决策工具运行以启动另一个 Activity 时,您可从 onCreate()内调用finish()方法来销毁 Activity。

    另外,应用在运行时可能会发生一些配置上的更改(configurationChanges),默认这些配置的更改也会影响到Activitiy的生命周期变化。下图是官网上所有可能的配置变化:

    总结来说,常用的有orientation,screenSize,locale这几项,需要注意的是配置orientation也要顺便配置screenSize,但在实际测试中,没有配置screenSize也不会出现Activity重建的情况,可能是测试的机型导致的吧。

    关于启动模式,这虽是一个老生常谈的问题,但很多人都没把他讲好,导致之前的认知上除了一些差错。虽然并不难,但如果想当然地理解,可是会出差错的,这里附上官网链接,一定要以官方的描述为准。https://developer.android.google.cn/guide/topics/manifest/activity-element#lmode

    参考和整理自https://developer.android.google.cn/guide/components/activities#top_of_page

  • 相关阅读:
    POJ 1436 Horizontally Visible Segments (线段树+区间覆盖)
    HDU 4671 Backup Plan (构造)
    POJ 3325 Help with Intervals (线段树(难))
    HDU 4649 Professor Tian (位运算 + 按位DP)
    HDU 4662 MU Puzzle (YY+枚举)
    HDU 4638 Group (线段树 + 离线)
    深入浅出Node.js (附录A)
    JS的变量声明和函数声明提升
    JS基础:翻转数组
    JS基础:求一组数中的最大最小值,以及所在位置
  • 原文地址:https://www.cnblogs.com/chitanta/p/9053394.html
Copyright © 2011-2022 走看看