1.AndroidManifest文件中的几个细节 , Android系统中一个界面就对应了一个activity。
1.一个应用程序可以有多个桌面图标:
创建桌面图片的方法,给activity添加以下节点:
<intent-filter>
//MAIN:应用程序的入口
<action android:name="android.intent.action.MAIN" />
//LAUNCHER:启动器. category常见的类型:CAR_MODE、CAR_DOCK车载电脑模式、LAUNCHER启动器、DEFAULT默认的类型,我们自己开发的activity通常使用这个类型。
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
1.action动作:可以使用系统定义好的类类型,可以自定义(大写);
2.activity节点中的label标签的值表示桌面图标的名称;
3.application节点中的label标签的值可以在应用程序管理列表中看到;
4.application节点中的label和activity节点中的label标签不是一个概念,activity节点中的label标签表示界面的标题;
2.意图设置动作激活新的界面(重点)
Intent意图:做一件事情的想法;
意图包括的元素:动作:action,数据:data
意图的作用:激活组件和携带参数.
* 使用意图开启一个activity的代码:
//隐式意图
Intent intent = new Intent();
//设置目标activity的动作(必须与配置文件的aciton一致)
intent.setAction("android.intent.action.SHOWSECOND");
//设置目标data的动作(必须与配置文件的data一致)
intent.setData(Uri.parse("qaa://011"));
//设置目标category的动作(必须与配置文件的category一致)
intent.addCategory("android.intent.category.DEFAULT");
//开启一个新的activity(打开一个新的界面)
startActivity(intent);
3.意图设计的目的
解耦:让应用程序能够独立运行又能相互调用.
* WebView的使用:
wv = (WebView) findViewById(R.id.wv);
//设置浏览器不带缓存的功能
WebSettings settings = wv.getSettings();
//设置浏览器是记录缓存数据
settings.setAppCacheEnabled(false);
//获取其他应用程序使用intent传递雇来的数据
Intent intent = getIntent();
Uri uri = intent.getData();
if(uri != null){
wv.loadUrl(uri.toString());
}
4.隐式意图和显式意图(重点)
* 隐式意图:
在开启目标activity的时候没有直接指定目标activity名称,通过指定一组动作、数据、类型等,让系统自动的去配置文件中匹配目标activity。开启的速度比较慢。
模版代码:
Intent intent = new Intent();
//设置目标activity的动作(必须与配置文件的aciton一致)
intent.setAction("android.intent.action.SHOWSECOND");
//设置目标data的动作(必须与配置文件的data一致)
intent.setData(Uri.parse("itheima://110"));
//设置目标category的动作(必须与配置文件的category一致)
intent.addCategory("android.intent.category.DEFAULT");
//开启一个新的activity(打开一个新的界面)
startActivity(intent);
应用场景:
开启别的应用程序中的activity。
* 显式意图:
在开启目标activity的时候直接指定目标activity名称。开启的速度比较快。
模版代码:
//创建显式意图,速度比较快。参数1:代表上下文,参数2:字节码。
Intent intent = new Intent(this, SecondActivity.class);
//开启目标activity
startActivity(intent);
应用场景:限于应用程序内部开启activity。
5.意图传递数据(重点)
从第一个界面跳转到第二个界面上,并且把数据传递给第二个界面。
传递数据:
//创建显式意图
Intent intent=new Intent(this, SecondActivity.class);
// 装入名字
intent.putExtra("name", "qaa");
//装入年龄
intent.putExtra("age", 11);
//简单的装入
Bundle b = new Bundle();
b.putString("name", "ama");
b.putInt("age", 4);
intent.putExtras(b);
//开启目标activity
startActivity(intent);
接收数据:
//获得调用者传递过来的意图对象
Intent intent = getIntent();
// 获得传递过来的名字
String name = intent.getStringExtra("name");
//获得传递过来的年龄
int age = intent.getIntExtra("age", 0);
//间接获得
Bundle b = intent.getExtras();
String name = b.getString("name");
int age = b.getInt("age");
//传递方:put,接收方:get
6.URI详解
URI:数据资源地址;
content://com.qaa.superbrowser/ad/table1/1
URL:http://www.baidu.com/image/1.jpg
7.开启activity获取返回值(重点)
从第一个界面跳转到第二个界面,当第二界面关闭的时候返回给第一个界面一些数据。
步骤:
1.创建一个显示意图,使用startActivityForResult方法开启目标activity:
Intent intent = new Intent(this,SecondActivity.class);
//开启目标activity,并期望目标activity关闭的时候返回一个结果数据
startActivityForResult(intent, 0);
2.在目标activity中设置返回数据,并关闭界面:
Intent intent = new Intent();
intent.putExtra("news", "我是第二个界面返回的额数据");
//设置返回的数据,在当前界面关闭的时候才会调用这个方法
setResult(100, intent);
//关闭当前界面
finish();
3.在调用者activity中重写onActivityResult方法接收目标activity返回的数据:
/**
* 接收目标activity返回的数据
* requestCode 请求码,是在开启activity时设置
* resultCode 结果码,是在设置返回数据时设置
* data 目标activity返回的意图对象
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
//接收目标activity返回的数据
String news = data.getStringExtra("news");
//使用请求码区分当前数据是从哪个业务逻辑界面返回的
switch (requestCode) {
case 0:
Toast.makeText(this, news, 0).show();
break;
case 1:
Toast.makeText(this, news, 0).show();
break;
}
}
8.请求码和结果码的作用(重点)
用来判断当前数据是从哪个业务逻辑界面返回的。
9.activity的生命周期(重点)
人的生命周期:被出生、幼年、童年、少年、青年、中年、老年。
Activity的生命周期(重点):7个
onCreate:初始化
onStart:开始
onResume:界面可见
onPause:暂停,界面不可见
onRestart:重新开始
onStop:停止
onDestroy:销毁
1.打开一个界面:onCreate、onStart、onResume;
2.最小化一个界面:onPause、onStop;
3.重新打开被最小化的界面:onRestart、onStart、onResume;
4.关闭一个界面:onPause、onStop、onDestroy;
10.横竖屏切换的生命周期(重点)
横竖屏切换的生命周期变化:先关闭前一个界面,再打开一个新的界面。
固定横竖屏的方法:
android:screenOrientation="portrait"
常见的类型:portrait竖屏、landscape横屏、sensor感应器类型 可以横竖屏自适应,默认是这个类型。
11.任务栈的概念
队列:先进先出;
栈:先进后出;
任务:要做一件事情;在Android中对应了一个打开的activity实例。
任务栈:存储任务的栈;
打开一个界面时,就会有一个任务压入栈中;
关闭一个界面时,就会从任务栈中清除一个任务;
当应用程序的界面都关闭的时候,任务栈就被清空了,说明应用程序也退出了;
任务栈启动模式:
standar:标准模式,每打开一个界面都会创建一个实例放入任务栈中;
singleTop:单一顶部模式,
12.singletop启动模式
singletop 单一顶部模式
在activity的配置文件中设置
android:launchMode="singleTop" 如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。 应用场景:浏览器的书签
13.singletask和singleinstance启动模式
singetask:单一任务栈,在当前任务栈里面只能有一个实例存在,应用于Activity独立的运行。
当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在
应用场景:浏览器的activity
如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码
singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在 如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance 应用场景: 电话拨打界面
14.帧动画
帧动画(Drawable Animation):把一组有序的图片,一帧一帧的去播放,这个变化过程;
代码(参考开发文档):
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<item
android:drawable="@drawable/girl_1"
android:duration="200"/>
<item
android:drawable="@drawable/girl_2"
android:duration="200"/>
<item
android:drawable="@drawable/girl_3"
android:duration="200"/>
<item
android:drawable="@drawable/girl_4"
android:duration="200"/>
<item
android:drawable="@drawable/girl_5"
android:duration="200"/>
<item
android:drawable="@drawable/girl_6"
android:duration="200"/>
<item
android:drawable="@drawable/girl_7"
android:duration="200"/>
<item
android:drawable="@drawable/girl_6"
android:duration="200"/>
<item
android:drawable="@drawable/girl_7"
android:duration="200"/>
<item
android:drawable="@drawable/girl_6"
android:duration="200"/>
<item
android:drawable="@drawable/girl_7"
android:duration="200"/>
<item
android:drawable="@drawable/girl_8"
android:duration="200"/>
<item
android:drawable="@drawable/girl_9"
android:duration="200"/>
<item
android:drawable="@drawable/girl_10"
android:duration="200"/>
<item
android:drawable="@drawable/girl_11"
android:duration="200"/>
</animation-list>