安卓中的四大组件_Activity

来源:互联网 发布:淘宝店如何做起来 编辑:程序博客网 时间:2024/06/15 05:06
  • 定义类继承Activity.

  • 在AndroidManifest.xml文件中声明Activity信息.

    <activity android:name="com.ycy.activitydemo.SecondActivity" ></activity>
  • 在类中实现onCreate方法, 去设置布局

  • 多个页面之间的跳转

    • 显式跳转, 在可以引用到目标类的字节码文件的情况下使用. 一般用于在自己程序的内部. 显示跳转不可以跳转到其他程序的页面中.

    • 隐式跳转, 可以在当前程序跳转到另一个程序的页面. 而且不需要引用那个类. 前提条件:必须知道另一个程序的页面的动作和信息.

      • 另一个程序的页面在清单文件中给Activity添加一个动作 <intent-filter> <action android:name="com.ycy.second" /> //随便指定

        <category android:name="android.intent.category.DEFAULT" />// 指定传递的数据是以: money开头<data android:scheme="money"/> // 指定传递过去的类型, 用于区分当前是什么操作.<data android:mimeType="com.ycy/mbx" /> 

        </intent-filter>

  • 打开浏览器页面

    /*<intent-filter>    <action android:name="android.intent.action.VIEW" />    <category android:name="android.intent.category.DEFAULT" />    <category android:name="android.intent.category.BROWSABLE" />    <data android:scheme="http" />    <data android:scheme="https" />    <data android:scheme="about" />    <data android:scheme="javascript" /></intent-filter>*/Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.addCategory("android.intent.category.BROWSABLE");Uri uri = Uri.parse("http://www.ycy.com");intent.setData(uri);startActivity(intent);
  • 打开系统短信发送的页面

    /*<intent-filter>    <action android:name="android.intent.action.VIEW" />    <action android:name="android.intent.action.SENDTO" />    <category android:name="android.intent.category.DEFAULT" />    <category android:name="android.intent.category.BROWSABLE" />    <data android:scheme="sms" />    <data android:scheme="smsto" /></intent-filter>*/Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.addCategory("android.intent.category.BROWSABLE");Uri uri = Uri.parse("sms:5556");intent.setData(uri);// 使用intent传递数据intent.putExtra("sms_body", "今晚7天假日酒店旁边的肯德基不见不散!!!");startActivity(intent);
  • Intent传递数据.

    • 可传递类型: 八大基本类型和数组, ArrayList, Bundle数据捆, 序列化接口(javabean)
  • 人品计算器

    • Activity之间回传数据

      1. 使用startActivityForResult方法开启新的页面

      2. 在被开启的新的页面里, 调用setResult方法设置回传的数据. 设置完后不会立刻传递到前一个页面, 而是等待新的页面关闭后, 才回传.

      3. 回传给开启Activity的onActivityResult方法.

  • Activity生命周期

    • startActivity开启一个Activity时, 生命周期的过程是: onCreate -> onStart(可见, 但不可交互) -> onResume(可见, 可交互)

    • 点击back键关闭一个Activity时, 生命周期的过程是: onPause(部分可见, 不可交互) -> onStop(完全不可见) -> onDestory(销毁了)

    • 当开启一个新的Activity(以对话框形式), 新的activity把后面的activity给盖住一部分时, 此时,先前的activity的生命周期执行的方法是: onPause(部分可见, 不可交互)

    • 当把新开启的Activity(以对话框形式)给关闭时, 此时,先前的activity的生命周期执行的方法是: onResume(可见, 可交互)

    • 当开启一个新的activity把后面的activity完全盖住时, 此时,先前的activity的生命周期的方法执行顺序: onPause -> onStop(完全不可见)

    • 当把新开启的activity(完全盖住)给关闭时, 此时,先前的activity的生命周期的方法执行顺序是: onRestart -> onStart -> onResume(可见, 可交互)

    • 实际工作中使用的方法

      • onResume 可见, 可交互. 把动态刷新的操作启动.
      • onPause 部分可见, 不可交互. 把动态刷新的一些操作, 给暂停了.

      • onCreate 初始化一些大量的数据.

      • onDestory 把数据给释放掉, 节省内存.
  • 横竖屏切换时, 生命周期, 默认情况:会把activity销毁再创建.

    • 不让Activity销毁在创建:在清单文件中的activity节点中加入属性

      • 4.0以下版本 android:configChanges="orientation|keyboardHidden"

      • 4.0以上版本 android:configChanges="orientation|screenSize"

      • 兼容所有版本 android:configChanges="orientation|keyboardHidden|screenSize"

  • 指定Activity以对话框的形式显示, 在清单文件中,activity节点追加以下主题

        android:theme="@android:style/Theme.Dialog"
  • 任务栈, 用来提升用户体验的.

    • 程序打开时就创建了一个任务栈, 用于存储当前程序的activity.
    • 所有的activity属于一个任务栈.
    • 一个任务栈包含了一个activity的集合, 去有序的选择哪一个activity和用户进行交互
    • 只有在任务栈栈顶的activity才可以跟用户进行交互.
    • 任务栈可以移动到后台, 并且保留了每一个activity的状态. 并且有序的给用户列出它们的任务, 而且还不丢失它们的状态信息.
    • 退出程序: 把所有的任务栈中所有的activity清除出栈, 然后任务栈销毁.

    • 问题:

      • 用户体验差, 需要点击多次返回才可以把程序退出了.
      • 数据冗余, 重复数据太多, 会导致内存溢出的问题(OOM)
  • Activity的启动模式, 在activity节点里指定launchMode的属性.

    • standard 标准模式(activity的默认模式), 导致上面的问题出现.

    • singleTop 单一顶部模式: 如果一个activity的实例已经存在当前任务栈的栈顶, 系统会发送一个Intent给那个实例的onNewIntent方法. 应用场景: 防止别的程序恶意打开我们的页面.

    • singleTask 单一任务栈模式: 如果activity的实例已经存在任务栈中, 系统就不会创建一个新的实例, 而是调用那个实例的onNewIntent方法, 并且把那个已经存在的activity 实例以上所有的activity给清除出栈, 把自己变成栈顶的效果. 应用场景: 商品列表 -> 商品详情 -> 图片详情 -> 大图查看 想从大图查看立刻回到商品列表, 并且把后面开启的三个页面关闭时.

    • singleInstance 单一实例模式: 系统会创建一个新的任务栈把activity的实例放在新的任务栈的栈顶(栈底), 其他的activity页面不会在这个任务栈中创建实例. 如果activity的实例已经存在, 系统会调用那个实例的onNewIntent方法. 应用场景: 在整个系统中只需要初始化一次的界面.


原创粉丝点击