您的位置:首页 > 其它

安卓中的四大组件_Activity

2013-06-23 15:21 232 查看
定义类继承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之间回传数据

使用startActivityForResult方法开启新的页面

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

回传给开启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方法. 应用场景: 在整个系统中只需要初始化一次的界面.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: