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

来源:互联网 发布:天圆地方软件 编辑:程序博客网 时间:2024/06/04 01:25

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返回的数据 */@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    String answer = data.getStringExtra("answer");    Toast.makeText(this, answer, 0).show();}

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

作用:用来判断是哪个业务逻辑界面返回的数据;代码: /** * 接收目标activity返回的数据 * requestCode 请求码,在开启activity设置的 * resultCode 结果码,设置返回数据时设置的 *  */@Overrideprotected 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 初始化activityonStart  开始activityonResume 暂停之后继续工作(缓冲)
  • 关闭一个界面:

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

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

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

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();
0 0