Android的Activity的页面跳转和数据传递

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>

原文地址:https://www.cnblogs.com/kingqinwang/p/5123452.html