Android四大组件之一activity
- 01.开启Activity获得到返回值的操作
- 02.显式意图和隐式意图的操作
- 03.Activity的生命周期(面试)
- 04.Activity的启动模式(面试)
页面跳转:
显示意图:
- 文件清单配置: 必须指定被开启的activity类名或者路径名
- 作用: 用于激活自己内部组件,效率高
隐式意图:
- 配置文件: 指定action和data即可
- 需要设置清单文件意图过滤器: intent-filter,配置意图过滤器默认default: Android应用或者平板
- 用于激活别的应用程序的界面,或者将自己的应用程序暴露给别的应用程序调用,效率低
- 重要配置:
- 清单文件配置——对应——Java代码
- action:跳转的目的界面–setAction(包名)
- category–addCategory(default)
- 节点data下的属性:
- scheme:数据的前缀–setData(Uri.parse(“前缀名://…”))
- host:主机名
- mime type:文件类型–setType(文件类型)
- setDataAndType(data,type)同时设置数据和数据类型
如何激活系统的应用界面
- 查看源码
- 查看清单文件
- 对照清单,编写对象的Java代码即可
激活短信
- 通过logcat知道包名和类名,查看源码,获取清单文件
- copy意图过滤器,有什么就写什么
- putExtra(key,value);key通查看源码查找getIntent–>getString
简单的短信助手的UI界面
* 需求: 给亲戚朋友发祝福短信
* 分析: 两个界面,通过A界面打开B界面,查询到短信祝福内容,B界面将内容发给A界面,点击发送按钮发送短信
* 操作步骤:
* 1. 设置主页面UI界面layout: 因为整体结构比较简单,所以采用线性布局
* 2. 关心控件:设置点击事件: 点击选择祝福语,点击选择联系人,点击发送信息
* 3. 点击选择祝福语:跳转到祝福语界面
* 0.写一个类继承activity,重写Oncreate方法,设置显示界面: setContextView
* 1.layout: 设置跳转ui采用: ListView布局
* 2.配置清单文件: <activity android:name="com.itheima.msnui.SelectConnActivity"></activity>
* 3.关心控件
* 4.设置适配器: 用数组适配器lv.setAdapter(new ArrayAdapter<String>(context,
resource, T[]));
* 5.设置条目点击事件:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String key = T[position];
Intent data =new Intent();
intent.putExtra(key, value);
setResult(resultCode, data);
finish();
}
});
* 6.主页面点击事件设置: Intent intent = new Intent(context, cls);
startActivityForResult(intent, requestCode);//requestCode>0,请求码用于区分不同跳转页面回传的数据
* 4.联系人的点击事件与祝福语点击事件思路基本相同
* 5.发送信息的点击事件设置:
* 1.获取文本框内容(联系人及祝福语),判断内容不能为空TextUtils.isEmpty(String str)
* 2.调用系统短信应用,发送信息:
Intent intent=new Intent();
intent.setAction("android.intent.action.SENDTO");
intent.addCategory("android.intent.category.BROWSABLE");
intent.setData(Uri.parse("smsto:"+联系人电话));
intent.putExtra("sms_body", 内容);
startActivity(intent);
* 6.短信存储草稿箱:
* 1.用sp存储,创建sp字段: private SharedPreferences sp;
* 2.初始化sp: sp= this.getSharedPreferences("config", 0);
* 3.重写onDestroy方法
* 4.获取联系人及短信内容
* 5.创建容器: Editor edit = sp.edit();
* 6.将联系人及短信内容存储到容器中: edit.putString("conn", conn);将容器提交,edit.commit();
* 7.在onCreate中,获取容器内容: String conn = sp.getString("conn", "");
* 8.将获取内容回显到文本框中
- 注意: 数组适配器,layout必须使用TextView,系统默认layout: Android.R.list.
- 开启activity的方式只有两种:
activity生命周期
- oncreate被创建–只被调用一次
- 当开启应用程序时,oncreate被调用
- ondestroy被销毁–只被调用一次
- 当被执行时,界面被销毁
- 保存文件操作可放在该方法下,如果简单文本可以用sp保存
- onstart 在界面不可见是被调用(继续播放)–可以多次调用
- onstop 在界面不可见是被调用(播放器暂停播放)–可以多次调用
- onresum 获取焦点,
- onpause 失去焦点,只能看不能摸
- onrestart 应用程序没有执行ondestroy,只是执行onstop,再次启动应用程序是被调用
- 完整生命周期: oncreate–>onstart–>onresum–>onpause–>onstop–>ondestroy
横竖屏生命周期问题
- 控件宽度和高度变化,activity生命周期会被重组
- 在activity中配置:
- 1.横竖屏朝向固定:
- 2.设置软硬盘方向改变,不影响activity生命周期: configChange
- 代码: android:configChanges=”keyboardHidden|screenSize|orientation”
activity的任务栈
task stack
- task: 每一个应用都有多个界面activity,每一个activity都是和用户交互的任务
- stack:先进后出的数据结构
- 作用: 记录用户操作顺序,后打开的界面先关闭,当所有的界面都被关闭,表示应用退出
activity启动模式
- standard: 标准启动模式(默认activity都是标准启动模式)
- singleTop: 单一顶部模式
- 配置: activity: launchMode=”singleTop”
- 如果发现已经在任务栈的顶部,就不会创建新的activity,复用已经存在的
- 应用场景,奇怪的用户体验–短信
- singletask: 单一任务栈
- 整个任务栈只允许有一个activity的实例存在
- 应用场景: 如果一个activity非常消耗内存和CPU资源,使用singletask启动模式–浏览器
- 作用: 节约内存
- singleInstance: 单一实例模式
- 整个手机操作系统只有一个实例存在,每一个activity都有自己的任务栈,一个应用程序可能有多个任务栈
- 应用场景: 电话界面