android基础之三——android中的意图及启动模式

本文详细介绍了Android中的意图(Intent)及其重要应用,包括隐式和显式意图的区别与使用场景,如何传递数据以及URI的解析。同时,探讨了Activity的启动模式,如singletop、singletask和singleinstance,强调了它们在任务栈管理中的作用。此外,还讲解了Activity生命周期的关键点,特别是横竖屏切换时的影响,以及如何在启动Activity时获取返回值。最后,简要提及了帧动画在Android开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01_AndroidManifest文件中的几个细节

   每个activity就是一个界面。

   结论:
   1、一个应用程序可以创建多个桌面图标:
     创建桌面图标的方法:
         <intent-filter>
                 //应用程序的入口
                <action android:name="android.intent.action.MAIN" />
                //启动器
                <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
   2、activity节点中的label标签的值是界面的标题;
   3、application节点中的label标签的是应用程序的名称,可以应用程序管理列表中看到;
   4、application节点中的label标签和activity节点中的label标签不是一个概念;

02_意图设置动作激活新的界面(重点)

从A界面跳转到B界面;

   aciton:动作 可以自定义,也可以使用系统定义好的;
   category:类型,lancher启动器,car_dock\car_mode车载电脑模式,default默认,
    我们开发的activity通常都是default类型。

   Intent:意图。做一件事情的想法就是意图。
   intent的作用:激活组件,携带参数。
   意图:动作、数据;

开启activity的步骤:

    //创建一个intent
    Intent intent = new Intent();
    //设置动作
    intent.setAction("android.intent.action.SHOWSECOND");
    //设置数据
    intent.setData(Uri.parse("itheima://110"));
    //设置类型
    intent.addCategory("android.intent.category.DEFAULT");

    //开启activity 界面
    //根据intent设置的属性在清单文件中与activity的intent-filter中设置的数据去匹配
    startActivity(intent);

03_意图设计的目的

架构师、构架师:多快好省的完成一个项目.
代码重复利用。
高内聚、低耦合:模块之间可以独立运行、又可以相互调用;

04_隐式意图和显式意图(重点)

  • 隐式意图:开启activity时候没有直接指定目标Activity的名称,通过指定一组动作、数据、类型让系统自动去配置文件中匹配目标activity。
  • 应用场景:开启别应用程序的activty。 缺点: 开启activity时需要匹配配置文件中的activity,耗费时间。

  • 显式意图:开启activity时候直接指定目标Activity的名称.比较快。

  • 应用场景:限于应用程序内部调用activity。

  • 隐式意图:

    //创建一个intent
        Intent intent = new Intent();
        //设置动作
        intent.setAction("android.intent.action.SHOWSECOND");
        //设置数据
        intent.setData(Uri.parse("itheima://110"));
        //设置类型
        intent.addCategory("android.intent.category.DEFAULT");
    
        //开启activity 界面
        //根据intent设置的属性在清单文件中与activity的intent-filter中设置的数据去匹配
        startActivity(intent);
    
  • 创建显示意图

  • Intent intent = new Intent(this, SecondActivity.class);
    
    startActivity(intent);
    

05_意图传递数据(重点)

使用intent传递数据,调用putExtra、putExtras方法;

  • 可以传递的数据类型:

    8大基本数据类型、数组;
    Bundle  类似于map的数据结构
    pacelable  序列化到内存中;
    serializable 序列化到文件中;
    
  • 传递参数代码:

    //创建显示意图
    Intent intent = new Intent(this, SecondActivity.class);
    
    //传递参数
    //intent.putExtra("ask", "学挖掘机哪家强");
      Bundle b = new Bundle();
      b.putString("answer", "中国山东找蓝翔");
      intent.putExtra("params", b);
    
  • 接收参数代码:

    Intent intent = getIntent();
    //String ask = intent.getStringExtra("ask");
    Bundle b = intent.getBundleExtra("params");
    String answer = b.getString("answer");
    

06_URI详解

<data android:scheme="http" android:host="www.baidu.com" android:port="80" android:path="/image/1.jpg" />
http://www.baidu.com/image/1.jpg

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

从A界面跳转到B界面,当B界面关闭的时候,返回一些数据给A界面。

步骤:

1、在A界面上开启B界面,调用的方法是startActivityForResult;

    //开启一个activity并期待返回数据
    startActivityForResult(intent, 0);

2、关闭B界面,关闭之前设置返回的数据;

    //设置返回数据
    Intent data = new Intent();
    data.putExtra("answer", "中国山东找蓝翔");
    setResult(100, data);

    //关闭当前界面
    finish();

3、在A界面开启一个方法接收B界面返回的数据;

 /**
 * 接收目标activity返回的数据
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {


    String answer = data.getStringExtra("answer");

    Toast.makeText(this, answer, 0).show();
}

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

作用:用来判断是哪个业务逻辑界面返回的数据;

代码:
 /**
 * 接收目标activity返回的数据
 * requestCode 请求码,在开启activity设置的
 * resultCode 结果码,设置返回数据时设置的
 * 
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    String result = data.getStringExtra("result");
    if(requestCode == 0){
        Toast.makeText(this, "第二个界面返回的数据:"+result, 0).show();
    }

    if(requestCode == 1){
        Toast.makeText(this, "第三个界面返回的数据:"+result, 0).show();
    }

}

09_activity的生命周期(重点)

  • 打开一个界面:

    onCreate 初始化activity
    onStart  开始activity
    onResume 暂停之后继续工作(缓冲)
    
  • 关闭一个界面:

  • onPause 暂停每个任务
    onStop  停止activity工作
    onDestroy 销毁activity实例
    
  • 最小化一个界面:

    onPause  暂停每个任务
    onStop 停止activity工作
    
  • 最小化一个界面后重新打开:

    onRestart 重新打开一个activity
    onStart  开始activity
    onResume 暂停之后继续工作(缓冲)
    

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

11_横竖屏切换的生命周期(重点)

横竖屏切换时:先销毁前一个activity的实例对象,重新创建一个新的activity实例;

landscape横屏、portrait竖屏、sensor传感器类型;

禁用横竖屏: android:configChanges="orientation|keyboardHidden|screenSize";

12_任务栈的概念

   队列:先进先出;

   栈:先进后出;
   任务:一个activity的实例(Task);

   每打开一个界面代表有一个任务入栈;
   每关闭一个界面代表有一个任务出栈;
   当任务栈清空的时候代表应用程序退出了;

   设计任务栈的目的:维护界面打开、关闭之间的关系的;

启动模式:

standar:标准模式,没打开一个界面都会创建一个实例放入任务栈中;

singleTop:单一顶部模式,

13_singletop启动模式

singletop 单一顶部模式 在activity的配置文件中设置android:launchMode="singleTop"
如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
应用场景:浏览器的书签

14_singletask和singleinstance启动模式

singetask 单一任务栈,在当前任务栈里面只能有一个实例存在
当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在

应用场景:浏览器的activity
如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码

singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在
如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
应用场景: 电话拨打界面

帧动画(重点)

帧动画:有一组有序的图片,一帧一帧地显示这些图片;

代码:

    iv = (ImageView) findViewById(R.id.iv);

    //添加ImageView的背景资源
    iv.setBackgroundResource(R.drawable.girl);

    //加载动画资源
    AnimationDrawable ad =  (AnimationDrawable) iv.getBackground();

    ad.start();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值