Activity知识点

一、概要

1. 建立Activity:

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

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

1.2 注册

AndroidManifest.xml文件中注册相关Activity
标签中添加相应Activity的需要的内容

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知识点_第1张图片
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。

你可能感兴趣的:(Activity知识点)