Activity的启动模式

Activity的启动模式

  1. 启动模式:决定新生成的Activity实例是否重用已经存在的Activity实例,是否和其它Activity共用一个task:

  2. Task: 一个具有栈结构的对象,一个Task中可以存放多个Activity,启动一个应用也就是创建一个与之对对应的task.

  3. Activity启动模式分类:

    • standard:Activity默认的启动模式。每次开启Activity时,都会创建一个Activity实例,并放入任务栈中

    • singleTop: 如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都需要创建新的Activity。

    • singleTask: 如果要激活的Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈。

    • singleInstance: 只有一个实例,并且该实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

  4. 如何设置Activity的启动模式---两种方式:

    • 在Manifests当中对目标Activity配置启动模式。即设置LancheMode属性

    • 通过设置IntenFlag设置Activity的启动模式:

      • 相关概念:

        • Task : 一个具有栈结构的容器,一个task可以存放多个Activity实例

        • taskAffinity:task序号(每个task序号不同,不同的Activity可以存放在不同的task当中)

          如果一个Activity没有明确指明其所处的task容器,则默认为当前Application指明的 taskAffinity,若当前Application也没有指明,则该Activity的taskAffinity 默认为当前Application所在的包名。

        • intentFlag属性常用值:

          • FLAG_ACTIVITY_NEW_TASK ------>singleInstance

          • FLAG_ACTIVITY_SINGLE_TOP ------>singleTop

          • FLAG_ACTIVITY_CLEAR_TOP ------>singleTask

          • FLAG_ACTIVITY_REORDERD_TO_FRONT ---如果栈里已经存在目标Activity,则将它拿到栈顶部,但原先在目标Activity之上的Activity不会被出栈。

 

Activity之间的数据传递方式

  1. intent.putExtra() 将需要传递的数据直接通过意图传递

  2. Bundle 将需要传递的数据存放在bundle当中,然后将bundle对象传递给intent对象

 

复杂数据的传递

  1. 把需要传递的类实现Serializable接口

  2. 把需要传递的类实现Parcelable,并重写相关方法

Activity数据的回传

Activity_01----->Activity_02------>Activity_01 过程

1.startActivityForResult(intent)

2.onActivityResult

(即只需要将Activity)

启动系统的Activity(隐式启动)

常用的系统Activity:(注意在Manifest中提前打开相应的权限)

  • 拨打电话: intent.setAction(Intent.ACTION_CALL)

  • 发送短信: intent.setAction(Intent.ACTION_SEND)

  • 打开相机: intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE)

  •  

 

posted @ 2022-02-07 11:14  安妍  阅读(105)  评论(0编辑  收藏  举报