Android四大组件之Activity随笔

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

Activity的创建和跳转


1 AndroidManifest清单文件详解

  1. Application节点的label标签表示,应用程序列表显示的应用名称
  2. Activity的label标签表示应用程序的桌面图标名称,他和Application的label标签不是一回事。
  3. 创建桌面图标:

     <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    
  4. 一个应用程序可以有多个桌面图表
  5. 常见的类别category android:name="android.intent.category.LAUNCHER" DEFAULT默认的,不写就是默认的 LAUNCHER启动器

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

  • 显示意图:开启目标Activity,直接指定目标Activity的字节码

    编写步骤:
    // 1. 创建意图对象,指定要目标Activity的字节码
    Intent intent = new Intent(this, SecondActivity.class);
    // 2. 开启Activity界面
    startActivity(intent);
    
    应用场景:打开同一个应用程序中的Activity界面
    优点:效率高,速度快,代码书写简单
    
  • 隐式意图:开启目标Activity,去清单文件匹配意图过滤器,如果匹配成功,打开目标Activity;如果匹配失败,就抛出异常,没有找个这个Activity

    编写步骤:
    
    //初始化意图
    Intent intent = new  Intent();
    //设置动作
    intent.setAction("tian.wang.gai.di.hu");
    //data可选
    intent.setData(Uri.parse("suibian:hahah"));
    //不写类别,默认添加一个default类别
    intent.addCategory("android.intent.category.DEFAULT");
    //开启目标Activity
    startActivity(intent);
    
    应用场景:打开其他应用程序的Activity界面
    缺点:效率低,速度慢
    

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

    //初始化意图
    Intent intent = new  Intent();
    //设置动作
    intent.setAction("tian.wang.gai.di.hu");
    //data可选
    intent.setData(Uri.parse("suibian:hahah"));
    //不写类别,默认添加一个default类别
    intent.addCategory("android.intent.category.DEFAULT");
    //开启目标Activity
    startActivity(intent);

    清单文件:
      <activity
        android:name="cn.itcast.secondactivity.SecondActivity"
        android:label="@string/app_name" >
        <intent-filter >
            <action android:name="tian.wang.gai.di.hu"/>
            <data android:scheme="suibian"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>

4 设计意图的目的

  • 目的:组件之间解耦,传递数据
  • 耦合:两个类之间即相互联系,又相互独立

Activity跳转时传递数据


5 意图传递数据(重点)

  1. java中的八大基本数据类型及其数组
  2. Parcelable :把对象序列化到内存中
  3. Serializable :把对象序列化到硬盘上
  4. bundle :数据捆,类似于map
  5. intent :意图

6 URI介绍

<!-- http://www.baidu.com:80/img/logo.png -->
 Uri的组成:
1. scheme   :简单理解为约束  http  ftp
2. host     :主机或者域名
3. port     :端口号
4. path     :资源的路径

Activity销毁时传递数据


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

打开第二个Activity界面,等待第二个Activity关闭,返回数据

  1. 开启目标Activity

    startActivityForResult(intent, 0);
    
  2. 返回数据

    Intent intent = new Intent();
    intent.putExtra("name", tvFeng.getText());      
    setResult(1, intent);
    
  3. 关闭目标Activity

    finish();
    
  4. 重写onActivityResult,获取返回的数据

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String name = data.getStringExtra("name");
        etName.setText(name);
    }
    

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

  • 请求码:区分数据是从哪一个Activity界面返回的
  • 返回码:判断传递过来的数据属于什么类型

Activity生命周期


9 activity的生命周期(重点)

人:被出生 --> 哭()--> 少年()--> 青年()--> 老年()--> 翘辫子()

恋爱:暗恋()--> 表白()--> 恋爱()--> 热恋()--> 失恋()

    开启Activity调用的生命周期方法:onCreate()-->onStart()-->onResume()
    关闭Activity调用的生命周期方法:onPause()-->onStop()-->onDestory()
    最小化Activity调用生命周期方法:onPause()-->onStop()
    最大化Activity调用生命周期方法:onRestart()-->onStart()-->onResume()

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

  1. 完整的生命周期entire lifetime:

    onCreate()--> onRestart()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestory()
    
  2. 可视生命周期visible lifetime:

    onStart()-->onResume()-->onPause()-->onStop()
    
  3. 前台生命周期:

    onResume()-->onPause()
    

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

先销毁Activity,然后在创建Activity

  1. 固定Activity的朝向

    android:screenOrientation="landscape"
    portrait:竖向,默认的方式   landscape:横向   sensor:旋转屏幕
    
  2. 是Activity不敏感屏幕朝向的变化

     android:configChanges="screenSize|keyboardHidden|orientation"
    

任务栈和Activity的启动模式


12 任务栈的概念

  • 任务:做一件事情,开启的Activity界面
  • 栈: 后进先出(吃进去吐出来) ,队列:先进先出(吃进去拉出来)
  • 应用场景:维护已经打开的Activity界面,管理内存中的Activity实例对象

13 Activity的启动模式

1. 标准启动模式:standard
    打开应用程序,系统给应用程序创建一个任务栈。开启目标Activity,把目标Activity压入任务栈,使其处于任务栈的栈顶。点击返回键,从任务栈的栈顶移除一个Activity。

    应用场景:默认情况下的绝大多数

2. 单一顶部模式:singleTop
    开启目标Activity,系统去任务栈的栈顶查找有没有目标Activity的实例,如果有就复用任务栈顶的Activity;如果任务栈的栈顶没有,就创建一个Activity实例对象,放在栈顶。

    应用场景:系统的浏览器书签

3. 单一任务模式:singleTask
    开启目标Activity,系统去整个任务栈查找有没有目标Activity实例对象,如果有,就清除目标Activity上面的所有Activity实例对象,使他位于任务栈的栈顶;如果没有,就创建一个Activity实例对象,加入到任务栈的栈顶。

    应用场景:浏览器

4. 单一实例模式:singleInstance
    开启目标Activity,系统给目标Activity单独创建一个任务栈。整个操作系统只有一个目标Activity的实例对象,并且他运行在一个单独的任务栈中

    应用场景:电话拨号器的来电界面

转载于:https://www.cnblogs.com/xiangjiaodiaoling/p/5259879.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值