美文网首页
Android Activity必知必会

Android Activity必知必会

作者: 董江鹏 | 来源:发表于2017-02-23 14:29 被阅读0次

    一、概要

    1. 建立Activity:

    1.1 继承Activity类并重写重要函数

    创建相关布局文件
    重写onCreate()onPause()等需要的函数,加载布局

    1.2 注册

    AndroidManifest.xml文件中注册相关Activity
    <activity>标签中添加相应Activity的需要的<intent-filter>内容

    2. 启动Activity:

    2.1 启动方式

    显示Intent:通过指定目标活动名称来启动
    隐式Intent:通过指定actioncategory来寻找合适的活动来启动

    2.2 数据传递

    向下一个活动传递数据:Intent数据存取的一些操作
    返回数据给上一个活动:通过startActivityForResult()方法启动下一个活动,并重写onActivityResult()处理返回数据

    2.3 启动模式
    • standard
    • singleTop
    • singleTask
    • singleInstance
    2.4 生命周期
    2.4.1 管理Activity生命周期

    完整生存期:在onCreate()onDestory()之间的各种操作
    可见生存期:onStart()->onResume()->onPause()->onStop()->onRestart()该活动可以被用户看见
    前台生存期:onResume()->onPause()该活动在这期间可以和用户进行交互

    2.4.2 存储Activity的状态:通过onSaveInstanceState()方法存储Activity的状态,保障活动被回收后能回复数据
    2.4.3 处理设定的变更:横竖屏切换的生命周期的变化

    3. 关闭Activity:

    可以通过finish()方法关闭此Activity,或是通过finishActivity()关闭之前启动的某个Activity

    二、重点

    1. Intent的使用

    1.1显式Intent启动的传值与取值
    • 传值
      传给下一个activity:在第一个活动中用putExtra("key",value)将数据暂存到Intent中,通过Intent传到下一个activity。
      传给上一个activity:如果前一个activity需要从当前activity获得结果,则需要在当前activity的finish()之前用setResult(resultCode,Intent)方法返回结果,存数据方法与上面一致。
    • 取值
      从上一个activity取:通过getIntent()获得Intent,并通过相关数据类型的get...("key")和键名获取数据。
      从下一个activity取:启动下一个activity的时候通过startActivityForResult()方法,并重写onActivityResult()方法,在该方法内获取数据并处理。
    1.2隐式Intent启动的传值与取值

    与显示的大致差不多,只不过是没有指定具体的下一个activity,在启动的时候是通过相应的action,一般常在找联系人、找图片......中用到

    2. 理解生命周期

    2.1 生命周期的进行路径和前后联系

    说再多不如上图:

    2.2 关于存储activity状态

    通过重写onSaveInstanceState()方法,将数据以key-value的形式暂存到saveInstanceState中,当activity需要重建的时候可以在onCreate()或是onRestoreInstanceState()中恢复。
    上图:

    activity_lifecycle.png
    2.3 关于状态变化的处理

    横竖屏切换时activity生命周期的变化
    均会经历有onCreate()onDestory()完整的生命周期

    3. 关注启动方式和Task

    一个Task是一系列Activity的集合,这个集合是以堆栈的形式来组织的,遵循后进先出的原则。

    3.1 启动模式与Flag以及返回栈

    启动模式在AndroidManifest.xml文件中更改
    也可以通过在Intent里使用addFlag()方法,但对于AndroidManifest.xml里已经定义了的(非standard模式)不生效。

    • standard:
      默认模式,每当启动一个新的活动,都会创建该活动的一个新的实例。
      与使用Intent里的FLAG_ACTIVITY_NEW_TASK类似(官网好像有点问题)

    • singleTop
      当启动一个活动时,如果发现返回栈的栈顶是该活动,则直接使用不新建;如果栈顶不是该活动,则新建。
      与使用Intent里的FLAG_ACTIVITY_SINGLE_TOP类似

    • singleTask
      当启动一个活动时,先检查返回栈中是否有该活动,如果有,则将该活动之上的全部出栈,直接使用该活动;如果没有,则新建。
      与使用Intent里的FLAG_ACTIVITY_CLEAR_TOP类似(官网好像有点问题)

    • singleInstance
      当启动这个模式的活动时,为这个Activity新建一个返回栈。这种模式用图看会好理解一些,图中SecondActivity则是这种模式。

    3.2 关于taskAffinity
    • 第一种情况:当某个应用的activity进入后台,当一个和它有相同affinity的Task进入前台时,它会重新宿主,进入到该前台的task中。(仅限于根Activity,与allowTaskReparenting属性没什么关系,而且后者不会被创建)
    • 第二种情况:如果通过Intent的FLAG_ACTIVITY_NEW_TASK加载某个Activity时,它会首先检查是否存在与自己taskAffinity相同的Task,如果存在,那么它会直接进入到该Task中,如果不存在则重新创建Task。

    相关文章

      网友评论

          本文标题:Android Activity必知必会

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