开启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来判断是哪个业务逻辑界面返回的数据.
activity的生命周期
从被创建到销毁经历几个阶段,每个阶段就表示一个方法,这些方法就是生命周期的回调。
安卓官方文档可查看详细信息
生命周期:
1. activity和人一样 都有生命周期
2. onCreate() 当activity第一次创建的时候调用
3. onDestroy() 当activity销毁的时候调用
4. onStart() 当activity可见的时候调用的方法
5. onStop() 当activity不可见的时候调用的方法
6. onResume() 当界面的按钮可以被点击了
7. onPause() 当界面的按钮不可以被点击的时候调用 失去焦点
8. onRestart() 当我按小房子的时候 再次启动的时候就会调用
1、activity创建时调用onCreate、onStart、onResume;
2、关闭activity时调用:onPause、onStop、onDestroy;
3、最小化activity时调用:onPause、onStop;
4、最小后重新打时调用:onRestart、onStart、onResume;
横竖屏切换的生命周期
横竖屏切换的实质是销毁原来的activity实例,重新创建一个activity实例
1、screenOrientation:landspace横屏、 portrait竖屏(固定屏幕的显示方式)
2、 android:configChanges="orientation|keyboardHidden|screenSize"让Android系统不在敏感横竖屏切换
任务栈的概念
任务:打开一个activity界面;任务栈:
将activity压入栈中,用来记录维护我们打开和关闭的activity 作用 就是用来维护用户界面操作体验的
设计任务栈的目的:用来维护用户的体验,记录打开界面和关闭界面的信息。1、打开一个activity界面表示在栈中存放了一个任务,关闭一个界面表示清除了一个任务;
2、栈里面的任务清除完毕后,应用程序退出;
3、当任务栈完全情况的时候 说明activity清空了
4、手机操作系统可以有多个任务栈
5、任务栈id 是一个自增长的
Activity4种启动模式
standard启动模式(默认的)
单纯的activity启动就压入栈中,activity销毁就从栈中抛出
singletop启动模式
singletop 单一顶部模式 在activity的配置文件中设置android:launchMode="singleTop"如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
应用场景:浏览器的书签
singletask启动模式
singetask 单一任务栈,在当前任务栈里面只能有一个实例存在
当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在
应用场景:浏览器的activity
如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码
singleinstance启动模式
singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在
如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
应用场景: 电话拨打界面
补充
如何激活(跳转到)短信发送界面
查看系统上层应用源码,查找短信发送页面在清单文件中的activity配置,从而知道它配置了什么样的意图过滤器,
就知道了如何发送意图(以什么格式传递数据)启动短信发送页面
Intent intent = new Intent(); //创建一个意图对象
intent.setAction("android.intent.action.SEND"); //设置开启意图的动作
intent.setType("text/plain"); //设置数据类型
intent.addCategory("android.intent.category.DEFAULT");
String data = objects[position]; //就是我点击item获取到的 数据
//我要把我点击的item的内容 传递到 短信发送界面
intent.putExtra("sms_body", data);
//开启意图
startActivity(intent);
销毁一个activity
调用activity的finish()函数
activity的启动
每个activity都是由意图启动的,隐式意图通过清单文件中配置的意图过滤器的各个属性来
匹配activity(例如配置了LANCH意图过滤器的activity会作为启动activity在桌面有一个图标),
匹配activity(例如配置了LANCH意图过滤器的activity会作为启动activity在桌面有一个图标),
显示意图直接通过类名启动意图。