day06_Activity页面跳转和数据传递

Activity界面跳转、数据传递和生命周期

四大组件

  • activity :界面
  • BroadcastReceiver :广播接收者
  • Service :服务,简单理解为一个没有界面的activity
  • ContentProvider :内容提供者,把应用程序的私有数据暴露出去

Activity的创建和跳转


1 AndroidManifest清单文件详解

  1. Application的label标签表示应用程序列表里应用的名称
  2. activity的label标签表示的应用程序的桌面名称
  3. Application的label和activity的label标签不是一回事
  4. 创建应用程序的桌面图标

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    
  5. 常见的类别

    • cateorg LAUNCHER DEFAULT bROWSER MAPS
  6. 一个应用程序可以有多个桌面图标

2 意图设置动作激活一个新的界面

Java代码:
    // 1. 创建意图对象
    Intent intent = new Intent();
    // 2. 设置动作
    intent.setAction("zuo.ren.bu.neng.tai.ma.rong");
    // 3. 开启activity
    startActivity(intent);

清单文件:
    <!-- 意图过滤器 -->
    <intent-filter >
        //和java代码的动作要匹配
        <action android:name="zuo.ren.bu.neng.tai.ma.rong"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>

3 隐式意图和显式意图(重点)

  • 隐式意图:开启目标activity,回去清单文件匹配意图,如果匹配成功,就开启activity;如果匹配失败,就报找不到这个activity的异常。

    • 缺点:效率低,代码数据复杂
    • 优点: 可以开启自己应用或者其他应用程序里的activity界面
  • 显示意图

    • 原理:开启目标activity,直接指定类的字节码,开启activity;只能开启自己应用程序里的activity。
    • 优点:效率高,代码书写简单
    • 缺点:只能开启自己应用程序里的activity,不能开启其他应用程序里的activity
    • 编写步骤

      // 1. 创建意图对象,指定类的字节码
      Intent intent = new Intent(this,ThirdActivity.class);
      // 2. 开启目标activity
      startActivity(intent);

4 设计意图的目的

  • 目的:组件之间解耦
  • 作用:激活组件,组件之间传递数据

Activity跳转时传递数据


5 意图传递数据(重点)

  1. java :八大基本类型及其数组
  2. bundle :数据捆
  3. Serializable :序列化
  4. Parcelable :序列化到公共内存
  5. Intent :意图类型

6 URI介绍

Url: 统一资源定位符 http://www.baidu.com/image/logo.png
URI: 统一资源标识符 itcast://xian10/班长

  • scheme :约束
  • host :主机名
  • port :端口号
  • path :路径

Activity销毁时传递数据


7 开启activity获取返回值(重点)

  • 开启目标activity,等待activity关闭时返回数据

    1. 特殊的方式开启activity
      startActivityForResult(intent, 1);

    2. 设置返回的数据
      Intent intent = new Intent();
      intent.putExtra(“num”, phoneNum);

    3. 设置返回的数据
      setResult(10, intent);
      //关闭当前页面
      finish();

    4. 获取activity返回的数据

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    String phoneNum = data.getStringExtra("num");
    etContacts.setText(phoneNum);
    

    }

8 请求码和结果码的作用(重点)

  • 区分数据是从哪个页面返回的

Activity生命周期


9 activity的生命周期(重点)

  • 人: 被出生–>哭()–>幼年()–>少年()–>青年()–>中年()–>老年()–>翘辫子()
  • 恋爱:暗恋()–>表白()–>热恋()–>痴恋()–>失恋()
  • activity生命周期:

  • 开启activity:onCreate()–>onStart()–>onResume()

  • 关闭activity:onPuse()–>onStop()–>onDestroy()
  • 最小化 :onPause()–>onStop()
  • 最大化 :onRestart()–>onStart()–>onResume()

10 读文档查看activity的生命周期的分类

  1. 完整生命周期entire lifetime

    onCreate()–>onStart()–>onResume()–>onPuse()–>onStop()–>onDestroy()

  2. 可视生命周期visible lifetime

    onStart()–>onResume()–>onPuse()–>onStop()

  3. 前台生命周期foreground lifetime

    onResume()–>onPuse()

11 横竖屏切换activity的生命周期

  • 先销毁一个activity,然后在床架一个新的activity

  • 固定activity屏幕朝向

    • landscape :横屏
    • portrait :竖屏,不设置就是默认的
    • sensor :自适应
  • 使activity不敏感屏幕朝向的变化

    • android:configChanges=”orientation|keyboard|screenSize”

任务栈和Activity的启动模式


12 任务栈的概念

  • 任务:开启的activity界面
  • 栈 :队列,先进先出(吃进去拉出来) 栈,先进后出(吃进去吐出来)

  • 把应用程序开启的activity放到一个栈里

13 Activity的启动模式

  • 影响activity在任务栈中的顺序

  • 标准模式:standard

    • 默认的,开启一个activity,系统创建这个activity的实例对象,把他放到应用程序任 务栈的栈顶
  • 单一顶部模式:singleTop

    • 开启activity界面,系统回去应用程序任务栈的栈顶查找有没有这个activity的实例对象,如果有,则复用栈顶的activity;如果栈顶没有,则在栈顶创建activity的实例对象

    • 系统浏览器的书签

  • 单一任务模式:singleTask

    • 开启activity,系统回去应用程序的任务栈查找有没有这个activity的实例对象,如果有,则移除这个activity上面的所有activity的实例对象,使其位于任务栈的栈顶;如果没有,则在栈顶创建这个activity的实例对象

    • 应用场景:系统浏览器

  • 单一实例模式:singleInstance

    • 开启目标activity,系统给这个activity创建一个单独的任务栈,这个任务栈就只有这个activity。整个手机操作系统里就只有这样的一个activity。
    • 应用场景:系统的来电界面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值