多个界面应用程序开发
  • 在清单文件中配置
  • 在代码中实现onCreate()-->setContentView();
  • 一个程序可以有多个界面,在桌面上可以有多个快捷图标.

清单文件中配置以下内容,即有多个启动入口

<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
界面跳转

Intent 可以用于activity传递数据

  • 传递页面:MainActivity
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);//传递数据//string类型的intent.putExtra("string", textView.getText().toString());//图片类型的intent.putExtra("image", BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));startActivity(intent);
  • 接受数据页面 Main2Activity
        //得到传递的数据Intent intent = getIntent();//接受字符串String text = intent.getStringExtra("string");//接受图片Bitmap image = intent.getParcelableExtra("image");textView.setText(text);imageView.setImageBitmap(image);
显式意图 & 隐式意图
  • 显式意图

必须要指定被开启的Activity的类名或者路径名称 激活自己应用程序的内部组建,推荐使用显式意图,效率高

  • 开启自己应用程序内的页面
Intent intent = new Intent(MainActivity.this, Main1Activity.class);
startActivity(intent);
  • 隐式意图

只需要指定action(动作)和data(数据)就可以 激活别的应用程序的界面,或者是自己应用程序的某个界面需要暴露给别的应用程序调用.效率低.

  • 开启自己应用程序内的页面(实际开发并不会这样使用,只是用于对比代码写出)
        Intent intent = new Intent();intent.setAction("com.example.yuewang.basicandroidday06.open2");intent.addCategory("android.intent.category.DEFAULT");startActivity(intent);
  • 开启外部应用程序内的页面
        Intent intent = new Intent();//action的内容与下面在清单文件中配置的相同intent.setAction("com.example.myapplication.Main3Activity");intent.addCategory("android.intent.category.DEFAULT");startActivity(intent);

还需要在(Main3Activity)清单文件中配置

        <activity android:name=".Main3Activity"><intent-filter><action android:name="com.example.myapplication.Main3Activity" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>
隐式意图的详细参数

intent.setType();和intent.setData();不能同时是使用,因为任意一个会清除前面一个设置的属性值,因此要想同事设置这两个值,可以使用setDataAndType()设置!

  • 需要注意的细节
  1. 当隐式意图配置了多个data标签的时候,代码编写的时候至少要配置一个!,如果多配置了,最后的会覆盖前面的
  1. 如果别人的隐式activity有多个Category的时候,尽量都写全,不要漏写
  1. 记住在清单文件中配置隐式activity的时候,一定要配置默认的category( <category android:name="android.intent.category.DEFAULT"/> ) 因为在代码中,就算不显示的去调用addCategory(),系统也会默认的给我们加上一个DEFALUT值的category,这个时候如果要打开的activity清单 文件中没有配置默认的category就会出错了!
  1. 发现隐式意图有多个action的时候,只需要配置一个就可以了。
使用Intent传递数据

三步:

  1. 告诉即将要打开的页面,你需要你返回的数据 --startActivityForResult(intent, 1);
  2. 使用setResult()返回请求的数据,并且设置对应的key --setResult(2, intent);
  3. 接受返回的数据 --onActivityResult
  • 具体代码:
        //1.告诉即将要打开的页面,你需要你返回的数据Intent intent = new Intent(this, SmsListActivity.class);startActivityForResult(intent, 1);
        //2.使用setResult()返回请求的数据,并且设置对应的keyIntent intent = new Intent();String contact = ContactListActivity.this.contact[position];intent.putExtra("contact", contact);setResult(2, intent);finish();
        //3.接受返回的数据@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//3.接受返回的数据,通过设置的resultCode区分是谁返回的数据if (requestCode == 1) {if (data != null) {String messageText = data.getStringExtra("message");content.setText(messageText);}} else if (requestCode == 2) {if (data != null) {String contactText = data.getStringExtra("contact");contact.setText(contactText);}}}
Activity的生命周期

onCreate()-->(onRestart())-->onStart()-->onResume()-->onPause()-->onStop()-->onDestory().

onCreate()--Activity创建时调用的方法
onDestory()--Activity销毁时调用的方法
onStart()--Activity页面可见时调用的方法
onStop()--Activity页面不可见时调用的方法
onResume()--Activity页面获取焦点时调用的方法
(案例中是在页面上开启一个透明的activity
时,之前的页面虽然可见,但是失去焦点了.可以在清单文件中设置主题
android:theme="@android:style/Theme.Translucent.NoTitleBar")
onPause()--Activity页面失去焦点时调用的方法
onRestart()--onStop()到onstart()时之前经历的一个方法
  • 横竖屏切换时的生命周期

横竖屏切换时默认回销毁当前activity,然后在重新开启,因此可以设置以下属性,这样activiy就不会因为切换横竖屏而销毁activity.

//设置屏幕的固定朝向
android:screenOrientation="landscape"(或者portrait)
//或者设置屏幕变化属性
android:configChanges="keyboardHidden|screenSize|orientation"
Activity的启动模式(android:launchMode="")
  • standard:标准启动模式

    默认场景,每次都会开启新的activity

  • singleTop:单一顶部模式

    如果activity已经开启,且位于栈顶,则不会开启新的activity,而是复用这个已经开启的activity,为了方式出现一些奇怪的用户体验,推荐使用这个模式,整个任务栈中可以允许有多个实例存在,只是检查栈顶是否是当前实例.

    应用场景:短信发送

  • singleTask:单一任务栈

    在整个任务战中之允许有一个当前的activity存在,如果要开启的activity已经存在,那么直接复用已经开启的,并且会把这个栈上当前activity上面其他的activity给清空.

    应用场景:如果一个activity非常消耗内存建议把这个activity设置成singleTask模式. 浏览器

  • singleInstant:单一实例

    整个手机系统中只有一个实例存在,且运行在单独的任务栈里面.

    应用场景:通话界面的activity

安卓基础-day06-20180131相关推荐

  1. 【安卓基础】Android直接通过路径来操作其他应用的私有目录,可以吗?

    在上篇文章[安卓基础]一文搞懂Android历代版本文件访问权限变化我们对同一个应用的的文件访问权限做了比较. 那么不同应用之间文件访问又有什么限制呢?我们准备分二到三篇文件来阐述. 这篇文章,主要来 ...

  2. 安卓基础知识(一) 服务(Service)

    安卓基础知识(一) 服务(Service) 一.基本概念: 1.服务就是长期于后台运行的程序,可以理解为是一个,用于执行长期任务,并且与用户没有交互的组件.每一个服务需要在配置文件AndroidMan ...

  3. 安卓基础学习之handler

    安卓基础学习之handler 文章目录 安卓基础学习之handler 前言 一.Handler 二.handlder的使用流程讲解 1.简单的示例 2.handler的一些方法 总结 前言 记录安卓开 ...

  4. 安卓手机来电防火墙_安卓基础知识自动化测试

    安卓基础知识 本章重点探讨AndroidUI自动化测试过程中所涉及到的原理和技术.掌握这些知识是为学习Appium自动化测试框架打下基础. 学习目标 了解API和安卓版本的关系 了解安卓组件,安卓程序 ...

  5. 移动应用安全开发规范-安卓基础篇

    周末参加了线下安卓巴士论坛组织的"安卓开发者的修炼之道",几位嘉宾分享的内容都很赞.没时间整理文字版,直接分享嘉宾的PPT了. 第一位嘉宾林魏,深圳爱加密科技公司攻防实验室负责人, ...

  6. 安卓基础控件(EditText、Button)以及布局(约束布局)的介绍

    安卓基础控件(EditText.Button)以及布局(约束布局)的介绍 目录 一.EditText 代码展示 二.Button 代码展示 三.应用例子 (1)布局代码展示 (2)方法 代码例子 (3 ...

  7. 安卓基础知识-layout布局详解。

    安卓基础知识 1. 目录结构: src存放java源代码. gen存放系统自动生成的配置文件 res存放应用用到的所有资源文件,如图片,布局等等 drawable存放不同分辨率的图片 layout存放 ...

  8. 安卓基础知识之View篇(四):View 事件滑动冲突解决方案

    安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门.同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系 ...

  9. 安卓基础知识之Activity篇(一):Activity生命周期

    安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门.同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系 ...

  10. 安卓基础巩固(二):四大组件:Activity、Service、Broadcast、Content Provider

    文章目录 Activity 生命周期 onCreate和onStart的区别 onPause和onStop的区别 生命周期的变化 Activity的启动 Intent Bundle Activity携 ...

最新文章

  1. JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
  2. js jquery关闭当前窗口
  3. linux查找文件或字符串的命令
  4. 一步一步实现iOS QQ第三方登录
  5. pytorch 语义分割loss_Recall Loss:用于不平衡图像分类和语义分割的召回损失
  6. linux中here文档,Linux下Bash Heredoc(Here document)的用法及基本示例
  7. Python sorted功能
  8. E: Sub-process /usr/bin/dpkg returned an error code (1)
  9. Spyder has encountered an internal problem!问题解决过程
  10. Tensorflow2下载与安装
  11. JAVA 泛型 入门
  12. Markdown中显示代码段的语法特殊字符`如何输入?
  13. 解决vscode下载很慢的问题
  14. 我们如何走到今天:重塑世界的6项创新
  15. 信息安全三要素CIA
  16. 把个人网站封装生成百度小程序的方法分享
  17. Linux 学习路线图 #CSDN博文精选# #IT技术# #学习路线# #系统化学习#
  18. TTL与CMOS逻辑电平匹配
  19. AppStore搜索不到已上架应用问题
  20. 股票python量化交易016-计算最大回撤

热门文章

  1. Teams 的 Meeting App
  2. 微信小程序云开发之简单两步实现集成赞赏加群弹窗功能
  3. 全网最细海龟 (turtle) 画图讲解 (一):初探海龟绘图
  4. python地理位置聚类_python实现地理位置的聚类
  5. 计算机键盘音乐 卡农,巴赫键盘音乐
  6. Cadence Allegro 中skill应用教程:让代码替我们打工
  7. Semantic-UI某些图标不能显示+资源引入两种方式
  8. php 中大括号,PHP中大括号#39;{}#39;用法实例总结
  9. matlab用DFT分析三频频谱,设计一DFT在信号频谱分析中的应用
  10. 指纹识别-传感器原理