AndroidManifest文件中的几个细节

结论:
1、一个应用程序可以创建多个桌面图标 2、创建快捷图标的方法:
<intent-filter>
//应用程序的入口
<action android:name="android.intent.action.MAIN" />
//启动器
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
3、activity的label标签的值就它的界面的标题 4、activity的label标签的值就它的桌面快捷图标的名称 5、application中的label标签和activity中的label标签不是一个概念,application中的label表示应用程序的名称,activity中的label标签表示的是它的界面的名称。 action:动作 可以自定义,可以使用系统定义
category:类型
android.intent.category.LAUNCHER 启动器,DEFAULT 默认类型,一般都是使用这个默认类型,
android.intent.category.CAR_DOCK、android.intent.category.CAR_MODE 车载电脑使用的模式,android.intent.category.TV

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

Intent 意图:做一件事情的想法。

吃饭,打人,喝茶

动作:action

数据:data

intent的作用:激活组件和携带参数。

跳转的步骤:

	//创建一个意图对象
Intent intent = new Intent();
//目标activity在配置文件配置的action的值
intent.setAction("android.intent.action.SECONDSHOW");
//使用目标activity在配置文件配置的data的scheme
intent.setData(Uri.parse("itheima://sdfdslkjk")); //使用目标activity在配置文件配置的data的category
intent.addCategory("android.intent.category.DEFAULT"); //开启一个activity,跳转到另一个activity的界面上
startActivity(intent);

在第二activity中得到第一个activity传过来的intent:

Intent intent = this.getIntent();
Uri uri = intent.getData();

意图设计的目的

意图设计的目的:解耦,实现应用程序的高内聚、低耦合。保证应用程序之间能够相互独立运行,又能彼此相互调用。

保证自己写代码能够重复使用。

架构师:保证项目 多快好省的把项目做完。

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

  • 隐式意图:开启activity的时候不需要直接指定activity的名称,通过指定一组动作和数据,让系统来找到这个特定的activity。

应用场景:

1、让外部应用程序开启自己应用程序里面的activity;

2、开启外部应用程序的activity;

代码:

 //创建一个意图对象
Intent intent = new Intent();
//目标activity在配置文件配置的action的值
intent.setAction("android.intent.action.SECONDSHOW");
//使用目标activity在配置文件配置的data的scheme
intent.setData(Uri.parse("itheima://game=天天酷跑"));
intent.addCategory("android.intent.category.DEFAULT"); //开启一个activity,跳转到另一个activity的界面上
startActivity(intent);
  • 显示意图:开启activity的时候直接指定activity的名称;

应用场景:应用程序内部调用。

代码:

Intent intent = new Intent(this,SecondActivity.class);
//封装数据
//intent.putExtra("name", "itheima");
//intent.putExtra("age", 6);
Bundle b = new Bundle();
b.putString("name", "itheima");
b.putInt("age", 6);
intent.putExtras(b);
startActivity(intent);

意图传递数据(重点)

可以数据类型:

1、8大基本数据类型、数组;

2、Bundle类似于map的数据结构;

3、Parcelable 序列化到内存;

4、Serializable 序列化到文件;

代码:

使用显示意图:

Intent intent = new Intent(this,SecondActivity.class);
//封装数据
//intent.putExtra("name", "itheima");
//intent.putExtra("age", 6);
Bundle b = new Bundle();
b.putString("name", "itheima");
b.putInt("age", 6);
intent.putExtras(b);
startActivity(intent);

使用隐式意图:

//创建一个意图对象
Intent intent = new Intent(); intent.setAction(Intent.action.view);
intent.setData(Uri.parse("tel://"+123);
intent.addCategory("android.intent.category.DEFAULT"); //开启一个activity,跳转到另一个activity的界面上
startActivity(intent);

开启activity获取返回值的步骤(重点)

步骤:

1、在开启activity时调用
//开启一个activity并等待返回结果
startActivityForResult(intent, 200);
2、在目标activity中设置返回的数据
Intent intent = new Intent();
intent.putExtra("username", username);
//设置界面关闭时返回数据
setResult(0, intent);
3、关闭目标activity
//自动关闭界面
finish();
4、重写onActivityResult方法接收返回的数据:

代码:

/**
* requestCode 开启activity时设置的请求吗
* resultCode 在目标activity中设置的结果码
* data 第二个界面返回的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//
// if(resultCode==0){
// String username = data.getStringExtra("username");
//
// Toast.makeText(this, username, 0).show();
// }
//
// if(resultCode==1){
// String thirdInfo = data.getStringExtra("thirdInfo");
//
// Toast.makeText(this, thirdInfo, 0).show();
// }
//
//使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据
if(requestCode==200){
String username = data.getStringExtra("username"); Toast.makeText(this, username, 0).show();
} if(requestCode==300){
String thirdInfo = data.getStringExtra("thirdInfo"); Toast.makeText(this, thirdInfo, 0).show();
}
}

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

使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据.

 代码:

	/**
* requestCode 开启activity时设置的请求吗
* resultCode 在目标activity中设置的结果码
* data 第二个界面返回的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//
// if(resultCode==0){
// String username = data.getStringExtra("username");
//
// Toast.makeText(this, username, 0).show();
// }
//
// if(resultCode==1){
// String thirdInfo = data.getStringExtra("thirdInfo");
//
// Toast.makeText(this, thirdInfo, 0).show();
// }
//
//使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据
if(requestCode==200){
String username = data.getStringExtra("username"); Toast.makeText(this, username, 0).show();
} if(requestCode==300){
String thirdInfo = data.getStringExtra("thirdInfo"); Toast.makeText(this, thirdInfo, 0).show();
} }

activity的生命周期(重点)

什么是生命周期:

被生下来、幼年、童年、青年、中年、老年

从被创建到销毁经历几个阶段,每个阶段就表示一个方法,这些方法就是生命周期的回调。

生命周期:

 onCreate:在activity被创建的时候调用这个方法,初始化界面。
onStart:当界面可见的时候调用
onResume 按钮可以被点击的时候 onPause 按钮失去焦点的时候: onStop 界面不可见的时候调用: onDestroy 销毁activity实例,做一些扫尾工作 1、activity创建时调用onCreate、onStart、onResume;
2、关闭activity时调用:onPause、onStop、onDestroy;
3、最小化activity时调用:onPause、onStop;
4、最小后重新打时调用:onRestart、onStart、onResume;

读文档查看activity的生命周期

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

禁用横竖自适应的方式:

1、screenOrientation:

landspace横屏、 portrait竖屏、
横竖屏切换:先销毁当前的activity实例,再创建一个新activity实例。

2、在activity中设置

android:configChanges="orientation|keyboardHidden|screenSize"

任务栈的概念

队列:

先进先出

栈:

先进后出

任务:

打开一个activity界面;

任务栈:

设计任务栈的目的:用来维护用户的体验,记录打开界面和关闭界面的信息。

1、打开一个activity界面表示在栈中存放了一个任务,关闭一个界面表示清除了一个任务;
2、栈里面的任务清除完毕后,应用程序退出;

singletop启动模式

singletop 单一顶部模式 在activity的配置文件中设置

android:launchMode="singleTop"

如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。

应用场景:浏览器的书签

singletask和singleinstance启动模式

singetask

单一任务栈,在当前任务栈里面只能有一个实例存在

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

应用场景:浏览器的activity

singletask

如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。

webkit内核 c代码

singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在

如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance

应用场景: 来电页面 有道词典

安卓基础干货(六):安卓Activity的学习的更多相关文章

  1. [安卓基础] 007.管理Activity的生命周期

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. Androidz之Activity概要学习

    Androidz之Activity概要学习 1.     Activity类概述 Activity(活动)是一个单独的.能获取焦点的,且能与用户交互的东西.所以我们通常在Activity类中的onCr ...

  3. Java07-java语法基础(六)面向对象

    Java07-java语法基础(六)面向对象 一.格式化输出 System.out.printf(“%格式字符”,输出项); 1.格式字符: d --->int.byte.short ld -- ...

  4. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  5. 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3

    孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...

  6. 二十六个月Android学习工作总结【转】

    原文:二十六个月Android学习工作总结 1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.     2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该 ...

  7. 零基础的学习者应该怎么开始学习呢?Python核心知识学习思维分享

    近几年,Python一路高歌猛进,成为最受欢迎的编程语言之一,受到无数编程工作者的青睐. 据悉,Python已经入驻部分小学生教材,可以预见学习Python将成为一项提高自身职业竞争力的必修课.那么零 ...

  8. Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”

    Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...

  9. Bootstrap<基础十六> 导航元素

    Bootstrap 提供的用于定义导航元素的一些选项.它们使用相同的标记和基类 .nav.Bootstrap 也提供了一个用于共享标记和状态的帮助器类.改变修饰的 class,可以在不同的样式间进行切 ...

随机推荐

  1. 2019.04.18 读书笔记 深入string

    整个.net中,最特殊的就是string类型了,它有着引用类型的特性,又有着值类型的操作方式,最特殊的是,它还有字符串池,一个字符串只会有一个实例(等下就推翻!). 鉴于之前的<==与Equal ...

  2. Mysql+innodb数据存储逻辑

    Mysql+innodb数据存储逻辑. 表空间由段,区,页组成 ibdata1:共享表空间.即所有的数据都存放在这个表空间内.如果用户启用了innodb_file_per_table,则每张表内的数据 ...

  3. vim安装与配置

    vim 8.0 安装 git clone https://github.com/vim/vim.git sudo apt-get install libncurses5-dev  # vim依赖一个n ...

  4. Linux 中的rsh,ssh

    第一部分 rsh 的安装与配置 http://www.ttlsa.com/linux/configure-rsh-rcp-scp-on-centos/ http://www.ahlinux.com/s ...

  5. 8.28_the end

    HomeWork the first level 1. 盒模型 #parent { width: 100px; height: 100px; background:black; overflow: h ...

  6. 针对浏览器不支持JavaScript的简单处理

    简单的思路是这样的: 在网页中显示某些内容,作为不支持JS的提示, 然后在页面载人的时候执行一段JS代码,代码的功能就是隐藏那个提示不支持JS的代码 具体内容看例子: <html> < ...

  7. Java入门系列-20-异常

    为什么要进行异常处理 下面这段代码能否正常执行 public class DemoCalc { public static void main(String[] args) { int a=0; in ...

  8. 判断img图片是否加载成功

    上班之余,记录一下工作中遇到的有趣问题... 事情是这样的...在做一个内嵌H5的app时,有一个“个人名片”页面...要求:如果后台接口有给头像的图片链接就用他们给的,如果没给,前端给个默认头像.. ...

  9. jenkins启动脚本

    [root@localhost system]# cat /etc/init.d/jenkins #!/bin/sh # # SUSE system statup script for Jenkins ...

  10. Jmeter进行性能测试时多台负载机的配置方法

    参考:https://blog.csdn.net/russ44/article/details/54729461 Jmeter进行性能测试时多台负载机的配置方法 Jmeter 是java 应用,对于C ...