创建第二个Activity

  • 需要在清单文件中为其配置一个activity标签
  • 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标

     <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  • 一个应用程序可以在桌面创建多个快捷图标。
  • activity的名称、图标可以和应用程序的名称、图标不相同

    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"

Activity的跳转

Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity

通过设置Activity的包名和类名实现跳转,称为显式意图

通过指定动作实现跳转,称为隐式意图

显式意图

  • 跳转至同一项目下的另一个Activity,直接指定该Activity的字节码即可

    Intent intent = new Intent();
    intent.setClass(this, SecondActivity.class);
    startActivity(intent);
  • 跳转至其他应用中的Activity,需要指定该应用的包名和该Activity的类名

    Intent intent = new Intent();
    //启动系统自带的拨号器应用
    intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
    startActivity(intent);

隐式意图

  • 隐式意图跳转至指定Activity

    Intent intent = new Intent();
    //启动系统自带的拨号器应用
    intent.setAction(Intent.ACTION_DIAL);
    startActivity(intent);
  • 要让一个Activity可以被隐式启动,需要在清单文件的activity节点中设置intent-filter子节点

    <intent-filter >
    <action android:name="com.itheima.second"/>
    <data android:scheme="asd" android:mimeType="aa/bb"/>
    <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    • action 指定动作(可以自定义,可以使用系统自带的)
    • data 指定数据(操作什么内容)
    • category 类别 (默认类别,机顶盒,车载电脑)
  • 隐式意图启动Activity,需要为intent设置以上三个属性,且值必须与该Activity在清单文件中对三个属性的定义匹配
  • intent-filter节点及其子节点都可以同时定义多个,隐式启动时只需与任意一个匹配即可
获取通过setData传递的数据
    //获取启动此Activity的intent对象
Intent intent = getIntent();
Uri uri = intent.getData();

显式意图和隐式意图的应用场景

  • 显式意图用于启动同一应用中的Activity
  • 隐式意图用于启动不同应用中的Activity
    • 如果系统中存在多个Activity的intent-filter同时与你的intent匹配,那么系统会显示一个对话框,列出所有匹配的Activity,由用户选择启动哪一个

Activity跳转时的数据传递

  • Activity通过Intent启动时,可以通过Intent对象携带数据到目标Activity

    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("maleName", maleName);
    intent.putExtra("femaleName", femaleName);
    startActivity(intent);
  • 在目标Activity中取出数据

    Intent intent = getIntent();
    String maleName = intent.getStringExtra("maleName");
    String femaleName = intent.getStringExtra("femaleName");

Activity生命周期

void onCreate()

  • Activity已经被创建完毕

void onStart()

  • Activity已经显示在屏幕,但没有得到焦点

void onResume()

  • Activity得到焦点,可以与用户交互

void onPause()

  • Activity失去焦点,无法再与用户交互,但依然可见

void onStop()

  • Activity不可见,进入后台

void onDestroy()

  • Activity被销毁

void onRestart()

  • Activity从不可见变成可见时会执行此方法

使用场景

  • Activity创建时需要初始化资源,销毁时需要释放资源;或者播放器应用,在界面进入后台时需要自动暂停

完整生命周期(entire lifetime)

onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory

可视生命周期(visible lifetime)

onStart-->onResume-->onPause-->onStop

前台生命周期(foreground lifetime)

onResume-->onPause


Activity的四种启动模式

每个应用会有一个Activity任务栈,存放已启动的Activity

Activity的启动模式,修改任务栈的排列情况

  • standard 标准启动模式
  • singleTop 单一顶部模式
    • 如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
    • 应用场景:浏览器的书签
  • singeTask 单一任务栈,在当前任务栈里面只能有一个实例存在

    • 当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在
    • 应用场景:浏览器的activity
    • 如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码
  • singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在

    • 如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
    • 应用场景: 电话拨打界面

横竖屏切换的生命周期

默认情况下 ,横竖屏切换, 销毁当前的activity,重新创建一个新的activity

快捷键ctrl+F11

在一些特殊的应用程序常见下,比如游戏,不希望横竖屏切换activity被销毁重新创建 需求:禁用掉横竖屏切换的生命周期 1. 横竖屏写死 android:screenOrientation="landscape" android:screenOrientation="portrait"

  1. 让系统的环境 不再去敏感横竖屏的切换。

     android:configChanges="orientation|screenSize|keyboardHidden"

掌握开启activity获取返回值

从A界面打开B界面, B界面关闭的时候,返回一个数据给A界面

步骤: 1. 开启activity并且获取返回值

    startActivityForResult(intent, 0);
  1. 在新开启的界面里面实现设置数据的逻辑

    Intent data = new Intent();
    data.putExtra("phone", phone);
    //设置一个结果数据,数据会返回给调用者
    setResult(0, data);
    finish();//关闭掉当前的activity,才会返回数据
  2. 在开启者activity里面实现方法 onActivityResult(int requestCode, int resultCode, Intent data) 通过data获取返回的数据

  3. 根据请求码和结果码确定业务逻辑

Android应用开发基础之六:页面跳转和数据传递的更多相关文章

  1. Android first --- 页面跳转及数据传递

    页面跳转即数据传递 创建第二个界面Acivity *需要在清单文件中添加配置一个Actuvity标签 标签中如果带有这个子节点,则会在Android中添加一个快捷图标 <intent-filte ...

  2. Android初级教程理论知识(第五章页面跳转和数据传递)

    总体概述: Android四大组件 Activity BroadCastReceiver Service ContentProvider 创建第二个activity 新创建的activity,必须在清 ...

  3. iOS页面跳转及数据传递

    转: http://blog.csdn.net/wang9834664/article/details/8025571 iOS页面跳转: 第一种 [self.navigationController  ...

  4. android 学习随笔十四(页面跳转与数据传递)

    1.activity 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> ...

  5. Android应用开发基础篇(1)-----Button

    Android应用开发基础篇(1)-----Button   一.概述        Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用      新建一个工程, ...

  6. Android中实现activity的页面跳转并传值

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  7. Flutter页面跳转返回数据

    Dart中的异步请求和等待和ES6中的方法很像,直接使用async...await就可以实现. 核心代码: _navigateToAddress(BuildContext context) async ...

  8. iOS开发中视图控制器ViewControllers之间的数据传递

    iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...

  9. php开发中的页面跳转方法总结

    PHP页面跳转实现的功能就是将网站中一个网页跳转到另一个网页中.对于刚刚学习PHP语言的朋友来说,是必须要掌握的基础方法. 页面跳转可能是由于用户单击链接.按钮等触发的,也可能是系统自动产生的.页面自 ...

随机推荐

  1. 使用https协议解决掉顽固不化的已解密的登录请求

    1.1 已解密的登录请求概述 在应用程序测试过程中,检测到将未加密的登录请求发送到服务器.由于登录过程所用的部分输入字段(例如:用户名.密码.电子邮件地址.社会保险号码,等等)是个人敏感信息,建议通过 ...

  2. Backbone之旅——Model篇

    Backbone作为前端的MVC框架,把后端的设计思想带到前端,使前端代码更加清晰.可维护性大大提高 Backbone依赖于underscore.js和jquery,所以在使用backbone的时候一 ...

  3. 使用 Portable Class Library(可移植类库)开发 Universal Windows App

    今天在这里跟大家聊聊关于 Windows Universal 应用夸平台的问题,首先Universal Windows App的定义相信大家已经有所了解了(如果你是一个刚刚接触 Universal A ...

  4. HttpRequest重写,解决资源战胜/链接超时/分块下载事件通知 问题。

    /************************************************************************************** 文 件 名: WebRe ...

  5. Warning: Multiple build commands for output file /xxx

    xcode中 有时候会报一个警告: [WARN]Warning: Multiple build commands for output file /xxx 要解决这个问题很简单: 1.选择你的工程 2 ...

  6. 网络安装archlinux(2012.8.20)笔记

    周末闲极无聊,把烂笔记本翻出来想装个Archlinux,发现USB不能启动,光驱也挂了,只好网络安装. 我先后试了两种安装方式,一种纯互联网启动,安装,一种局域网启动,再互联网安装.分别说说. 不管哪 ...

  7. java nio 网络框架实现

    maven项目 https://github.com/solq360/common 链式编/解码 链路层链式处理 管道管理socket 多协议处理非常方便 仿netty NioEventLoop 单线 ...

  8. 检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件时失败,原因是出现以下错误: 80040154

    异常类型:COMException 异常消息:检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件时失败,原因是出现以下错误: ...

  9. Spring中加载配置文件的方式

    原文:http://blog.csdn.net/snowjlz/article/details/8158560 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应 ...

  10. [转载]SharePoint 2013测试环境安装配置指南

    软件版本 Windows Server 2012 标准版 SQL Server 2012 标准版 SharePoint Server 2013 企业版 Office Web Apps 2013 备注: ...