Android基础-06
2015-04-03 11:44
92 查看
Android基础-06 Activity页面跳转和数据传递
01_AndroidManifest文件中的几个细节
在Android应用程序中一个activity就对应了一个界面。结论:
1、一个应用程序可以有多个桌面图标; 2、创建快捷图标的方法: <intent-filter> //main 应用程序的入口 <action android:name="android.intent.action.MAIN" /> //LAUNCHER 启动器 <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 3、activity节点中label的值就是桌面图标的名称; 4、activity节点中label的值就是界面标题的(值)名称; 5、应用程序的名称可以在应用程序的管理列表中看到,application节点中的label标签和activity中的label标签不是一个概念,application节点中的label标签表示应用程序的名称。
02_意图设置动作激活新的界面(重点)
从第一个界面跳转到第二个界面:Intent意图:做一件事情的想法; Intent意图的作用:激活组件和携带参数; 意图包含要素: 动作、数据; 吃饭:动作、数据 打人:动作、数据 泡茶: 泡妞:动作、数据
模版代码:
//创建一个开启第二个界面的意图 Intent intent = new Intent(); //设置目标activity的动作 intent.setAction("com.itheima..multiview.SECONDSHOW"); //设置目标activity的数据 intent.setData(Uri.parse("itheima://110")); //设置目标activity的类型 intent.addCategory("android.intent.category.DEFAULT"); //开启一个新的界面 startActivity(intent);
03_意图设计的目的
意图设计的目的:解耦; 解耦:要求写的代码模块或者方法能够独立运行和彼此相互调用; 架构师、构架师:多快好省的完成一个项目;
代码:
private WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //得到浏览器对象 wv = (WebView) findViewById(R.id.wv); //设置浏览器不缓存数据 WebSettings settings = wv.getSettings(); settings.setAppCacheEnabled(false); //得到其他组件或应用程序传递过来的intent对象 Intent intent = getIntent(); Uri uri = intent.getData(); if(uri != null){ //得到其他应用程序传递过来的url地址 String url = uri.toString(); //使用浏览器打开一个页面 wv.loadUrl(url); } }
04_隐式意图和显式意图(重点)
1、隐式意图:
在开启目标activity时,不需要直接指定目标activity的名称,通过指定一组动作、数据、类型等属性,让系统从清单文件中匹配指定的acitivity来开启activity。模版代码:
//创建一个开启第二个界面的意图 Intent intent = new Intent(); //设置目标activity的动作 intent.setAction("com.itheima..multiview.SECONDSHOW"); //设置目标activity的数据 intent.setData(Uri.parse("itheima://110")); //设置目标activity的类型 intent.addCategory("android.intent.category.DEFAULT");
应用场景:开启其他应用程序中的组件时使用隐式意图;
2、显式意图:
在开启目标activity时需要直接指定目标activity名称;模版代码:
//创建一个显示意图开启第二个界面 Intent intent = new Intent(this, SecondActivity.class); //开启一个新的界面 startActivity(intent);
应用场景:开启应用程序内部的activity;
05_意图传递数据(重点)
从第一个界面传递一些数据给第二个界面,在第二个界面上显示出来;intent可以传递的数据类型:
八大基本类型及其数据: parcelable Serializable Bundle putExtras(Bundle);
代码:
传递数据:
//创建一个显示意图开启第二个界面 Intent intent = new Intent(this, SecondActivity.class); //把需要提交的数据封装到意图对象中 // intent.putExtra("name", "itheima"); // intent.putExtra("age", 4); // Bundle b = new Bundle(); b.putString("name", "itheima"); b.putInt("age", 4); intent.putExtra("info", b); //开启一个新的界面 startActivity(intent);
接收数据:
Intent intent = getIntent(); // // String name = intent.getStringExtra("name"); // int age = intent.getIntExtra("age", 0); Bundle b = intent.getBundleExtra("info"); String name = b.getString("name"); int age = b.getInt("age"); tv.setText("name:"+name+";age:"+age);
06_URI介绍
url: http://www.baidu.com/image/1.jpgURI的组成部分:
1、scheme:协议的名称,content,tel; 2、主机名: 3、路径: 4、访问的资源数据:
07_开启activity获取返回值(重点)
从第一个界面跳转到第二个界面上,当第二个界面关闭的时候给第一个界面返回一些数据,在第一个界面显示返回的数据。1、从第一个界面跳转到第二个界面上,期待第二个界面返回数据; 2、在第二个界面关闭之前设置返回的数据,当第二个界面关闭时返回数据: 3、在第一个界面显示返回的数据:
MainActivity.java:
package com.itheima.multiview; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { /** * 在avtivity实例一创建的时候就会调用这个方法 * 初始化avtivity实例 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载界面的布局文件 setContentView(R.layout.activity_main); } public void jump(View view){ //创建一个显示意图开启第二个界面 Intent intent = new Intent(this, SecondActivity.class); //开启一个新的界面,期待目标activity返回数据 // startActivity(intent); startActivityForResult(intent, 0); } //接收目标activity返回的数据 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String info = data.getStringExtra("info"); Toast.makeText(this, info, 0).show(); } }
SecondActivity.java:
package com.itheima.multiview; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class SecondActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载界面的布局文件 setContentView(R.layout.activity_second); tv = (TextView) findViewById(R.id.tv); } public void return01(View view){ //设置返回的数据, Intent data = new Intent(); data.putExtra("info", "我是从第二个界面返回的数据"); //当界面关闭时调用这个方法生效 setResult(100, data); //关闭当前界面 finish(); } }
08_请求码和结果码的作用(重点)
请求码和结果码的作用:用来当前数据是从哪个业务逻辑界面返回的。代码:
MainActivity.java:
package com.itheima.multiview; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { /** * 在avtivity实例一创建的时候就会调用这个方法 * 初始化avtivity实例 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载界面的布局文件 setContentView(R.layout.activity_main); } public void jump(View view){ //创建一个显示意图开启第二个界面 Intent intent = new Intent(this, SecondActivity.class); //开启一个新的界面,期待目标activity返回数据,设置了请求码 // startActivity(intent); startActivityForResult(intent, 0); } public void jump02(View view){ //创建一个显示意图开启第二个界面 Intent intent = new Intent(this, ThirdActivity.class); //开启一个新的界面,期待目标activity返回数据,设置了请求码 // startActivity(intent); startActivityForResult(intent, 1); } //接收目标activity返回的数据 //requestCode 请求码,是在开启目标activity时设置的 //resultCode 结果码 ,是在目标activity设置返回数据时设置的 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // switch (requestCode) { // case 0: // String info = data.getStringExtra("info"); // Toast.makeText(this,"从第二个界面返回的数据是:"+ info, 0).show(); // break; // case 1: // // String info1 = data.getStringExtra("info"); // Toast.makeText(this,"从第三个界面返回的数据是:"+ info1, 0).show(); // break; // } switch (resultCode) { case 100: String info = data.getStringExtra("info"); Toast.makeText(this,"从第二个界面返回的数据是:"+ info, 0).show(); break; case 300: String info1 = data.getStringExtra("info"); Toast.makeText(this,"从第三个界面返回的数据是:"+ info1, 0).show(); break; } } }
SecondActivity.java:
package com.itheima.multiview; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class SecondActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载界面的布局文件 setContentView(R.layout.activity_second); tv = (TextView) findViewById(R.id.tv); } public void return01(View view){ //设置返回的数据, Intent data = new Intent(); data.putExtra("info", "我是从第二个界面返回的数据"); //当界面关闭时调用这个方法生效 setResult(100, data); //关闭当前界面 finish(); } }
09_activity的生命周期(重点)
生命周期:在生命的整个期间,经历一些阶段,在每个界面都会调用的相应的方法(方法的回调)。暗恋、初恋、热恋、痴恋、失恋;
onCreate:初始化; onStart:开始activity,界面可见时调用这个方法; onResume:获得界面焦点; onPause:失去界面焦点; onStop:界面不可见; onRestart:重新开始打开一个界面; onDestroy:在销毁实例对象之前调用这个方法;
10_读文档查看activity的生命周期
整体生命周期:onCreate、onStart、onResume、onPause、onStop、onDestroy; 可视化的生命周期:onStart、onResume、onPause、onStop; 前置生命周期:onResume、onPause;
11_横竖屏切换的生命周期(重点)
横竖屏切换的生命周期:先关闭前面一个界面,打开一个新的界面;1、设置屏幕的方向:设置screenOrientation="landscape",landscape横屏、portrait竖屏、sensor传感器类型(自适应); 2、设置切换屏幕方向时不调用生命周期的方法:configChanges="orientation|screenSize|keyboardHidden";
12_任务栈的概念
队列:先进先出; 栈:先进后出; 任务:activity的实例对象。 任务栈:用于存放任务的栈; 打开一个界面,在任务栈中存放对应的一个任务;关闭一个界面的时候,从任务栈中清除对应的任务; 当任务栈中的任务被 清除完了,表示应用程序退出了。
13_启动模式:
standard:标准模式,没打开一个界面都会创建一个实例放入任务栈中;singleTop:单一顶部模式;
singletop启动模式
singletop 单一顶部模式 在activity的配置文件中设置android:launchMode="singleTop" 如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。 应用场景:浏览器的书签
singletask和singleinstance启动模式
singetask 单一任务栈,在当前任务栈里面只能有一个实例存在; 当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个任务存在。 应用场景:浏览器的activity 如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码 singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在 如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance 应用场景: 电话拨打界面
15_应用程序签名打包
把应用程序的代码打包成apk;给应用程序打包时使用签名的原因: 避免覆盖安装(如果应用程序的包名相同就会出现覆盖安装的情况;
keystore文件和密码一定要保存号。
资料下载
相关文章推荐
- android基础知识06:intent和intentfilter
- android基础知识12:android自动化测试06—Instrumentation 01 例子
- Android初级之组件基础06-CheckBox
- android基础知识12:android自动化测试06—Instrumentation 01 例子
- android基础知识12:android自动化测试06—Instrumentation 04 解析
- android基础知识12:android自动化测试06—Instrumentation 03 技术概要
- 【Android基础笔记06】Activity管理及Intent七大属性
- 【Android核心基础06】 - Activity
- android基础知识12:android自动化测试06—Instrumentation 03 技术概要
- android基础知识12:android自动化测试06—Instrumentation 05 InstrumentationTestRunner
- 06、Android开发基础之常用的单位
- android基础知识12:android自动化测试06—Instrumentation 02 单元测试
- android基础知识12:android自动化测试06—Instrumentation 05 InstrumentationTestRunner
- android基础知识06:intent和intentfilter
- android基础知识12:android自动化测试06—Instrumentation 02 单元测试
- Android基础知识06
- android基础知识12:android自动化测试06—Instrumentation 04 解析
- android学习1 android应用的基础
- Android基础 : Android Content Provider
- Android文档(二)-应用基础(1)应用组件(Application Components)