Android四大组件--activity

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都有自己的任务栈,一个应用程序可能有多个任务栈
    • 应用场景: 电话界面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值