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. 洛谷 P3975 / loj 2102 [TJOI2015] 弦论 题解【后缀自动机】【拓扑排序】

    后缀自动机入门. 题目描述 为了提高智商,ZJY 开始学习弦论. 这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为 \(n\) 的字符串,求出它的第 \ ...

  2. Codeforces - tag::graphs 大合集 [占坑]

    520B 给定初始n和目标m,存在两种操作\(-1\)和\(×2\),要求最少操作次数 无脑解法是BFS,不能解决稍大的规模 当n>m时,输出n-m 否则逆向处理,转换为m到n的最小操作次数,存 ...

  3. <div>标签输入文字

    @*输入框,contenteditable="true"使能div可以输入文字*@ <div contenteditable="true" class=& ...

  4. 【Python】Excel数据处理

    1.环境准备 > python2.7 > xlrd,xlwt模块下载与安装,前者用来读取excel文件,后者用来写入excel文件 2.实战案例 案例场景: > excel1中包含某 ...

  5. 向指定url发送请求与获取响应

    string url = @"https://www.baidu.com"; //向指定服务器发起请求 HttpWebRequest request = (HttpWebReque ...

  6. 使用Filter解决登录中乱码问题

    使用Filter解决登录中乱码问题 衔接:https://www.cnblogs.com/zst18980621948/p/10654088.html 1.工作目录 新增Filter类 2.Login ...

  7. Which mb sdconnect c4 worth the money?

    MB SD connect C4 with laptop v2018.5 Version avaiable now ,It is ready to work after you get it ,wor ...

  8. HttpClient登陆后获取并携带cookies发起请求

    最近项目中,用到了登陆后获取并携带cookies发起请求的业务场景,现总结写出来备忘一下. 1.定义存取cookies信息的全局变量 public class HttpUtil { /** * 用来存 ...

  9. python namedtuple命名元组

    from collections import namedtuple Animal=namedtuple('Animal','name age type') perry=Animal(name='pe ...

  10. sqlplus column命令用法

    column是sqlplus里最实用的一个命令,很多时候sql语句输出的列宽度不合适而影响查看,都需要用到这个命令来更改select语句中指定列的宽度和标题.大部分时候,我们可以简写column为co ...