【Android】Activity启动模式
2016-02-24 00:22
302 查看
使用
使用显示
显示使用
可以看到在创建
使用隐式
没有明确指定将要启动的
上述代码中
在上述代码中
综上所述,显示
另外需要注意的是,
最后来介绍一下
一个应用程序由多个
一个应用程序的优先级是受其最高优先级的
Intent启动
Activity两种方法
使用显示
Intent启动
Activity
显示使用
Intent启动组件的时候需要明确指定被激活组件的名称。具体代码很简单,如下所示
Intent intent = new Intent(MainActivity.this, NextActivity.class); startActivity(intent);
可以看到在创建
Intent的时候需要接受两个参数,第一个参数是当前的上下文环境,第二个参数是即将要启动的
Activity的
class。也可以通过接受包名、类全路径名这两个参数来启动
Activity,具体代码如下
intent.setClassName("com.example.demo", "com.example.demo.xxx"); startActivity(intent);
使用隐式
Intent启动
Activity
没有明确指定将要启动的
Activity类名的
Intent称为隐式意图,
Android系统会根据隐式意图中设置的动作
action、来别
category、数据类型和
Uri等找到合适的组件,具体代码如下所示
/* * * 隐式使用Intent启动Activity * **/ <activity> <inte1nt-filter> <!--设置action属性,需要在代码中根据所设置的name打开指定的组件--> <action android:name="com.example.demo" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
上述代码中
<action>标签制定了
setAction()这个动作,
<category>标签则包含了一些类别信息。只有当
<action>和
<category>中的信息都匹配时,相应的
Activity才会被启动。代码如下所示
Intent intent = new Intent(); // 设置动作和清单文件一样 intent.setAction("com.example.demo"); startActivity(intent);
在上述代码中
intent.setAction("com.example.demo")指定了
action动作,这里并没有指定
category类别,这是因为清单文件中
android:name="android.intent.category.DEFAULT"是默认的
category信息,最后
startActivity(intent)隐式启动活动。
综上所述,显示
Intent开启组件的时候必须明确指定要开启组件的类名,隐式
Intent开启组件的时候要求
intent设置的
action动作和
category类别一致。而且隐式
Intent的功能要比显示
Intent更加强大,不仅可以开启本应用的组件,还可以开启其他应用的组件和系统组件。
Activity的四种启动模式
standard,默认下即为标准模式,每次调用
startActivity()方法就会创建一个新的
Activity对象,它会进入任务栈并处于栈顶位置。对于使用
standard模式的
Activity系统不会判断这个
Activity是否在栈中存在,每次启动都会创建一个新的
Activity实例。
singleTop,与
standard模式类似,不同的是,如果要启动的
Activity如果已经位于栈顶则直接使用它而不创建新的
Activity实例。如果要启动的
Activity没有位于栈顶时,则会创建一个新的
Activity实例。
singleTask,当
Activity的启动模式指定为
singleTask,每次启动该
Activity时系统会首先检查栈中是否已经存在该
Activity的实例,如果发现已经存在,就把当前
Activity之上的所有
Activity全部出栈,如果没有发现,就会在一个新的任务栈中创建一个该
Activity的实例。如果希望
Activity在整个应用程序中只存在一个实例可以使用
singleTask模式。
singleInstance,不同于上述三种模式,当
Activity的启动模式指定为
singleInstance时,系统会启用一个新的任务栈来单独管理这个
Activity实例。所以
singleInstance模式来加载
Activity时,无论从哪个任务栈中启动该
Actiivty,都只会创建一个该
Activity的实例,分两种情况:如果要启动的
Activity不存在,系统会先创建一个任务栈,然后创建该
Activity的实例并把它加入栈顶,并且这个任务栈中不在加入其它
Activity实例,只用来管理这一个
Activity实例;如果要启动的
Activity已经存在,无论位于哪个应用程序或者哪个任务栈中,系统都会把该
Activity所在的任务栈转到前台,从而使该
Activity显示出来。实际上在开发中如果需要
Activity在整个系统中都只有一个实例,这时就需要用到
singleInstance模式来启动。
另外需要注意的是,
Activity的加载模式受到启动
Activity的
Intent对象中设置的
Flag属性和注册文件
AndroidManifest.xml中
<activity>标签中的
android:launchMode属性来交互控制。
Activity任务栈
最后来介绍一下
Android任务栈,也叫作
Android管理栈。实际上开发者是无法控制
Activity的状态的,而
Android任务栈就是用来管理
Activity的状态的。
一个应用程序由多个
Activity组成,各
Activity之间的关系很松散并没有直接的关联时,必须有一个
activity被指定为主
activity,他是程序启动时首先显示的界面。程序启动后所有
activity都被放在一个栈中。当一个新
Activity启动时,其实例将会移到栈顶。如果用户按后退键返回,或者前台的Activity结束,其实例都会被移出栈并销毁,位于其下方的
activity就会被移上来并成为活动状态。
一个应用程序的优先级是受其最高优先级的
Activity影响的。当决定某个应用程序是否要终结并释放资源时,
Android内存管理使用栈决定基于
Activity的应用程序的优先级。
相关文章推荐
- Android下拉刷新汽车加速仪表盘效果
- Android Studio 常见问题之Rendering Problems
- Drawable Resources
- Android笔记之Activity
- Android Service生命周期 Service里面的onStartCommand()方法详解
- GitHub 优秀的 Android 开源项目
- Android 设备兼容
- Android实现版本更新提示
- Android 图片三级缓存机制工具类封装
- Android Studio中配置SonarQube
- Android实现SwipeBack(右滑退出)效果
- 【分享】Android中几种图像特效处理的小技巧
- AsyncTask分析
- Android 立方体翻转效果
- Android进阶之抢购倒计时功能
- <<Android 开发艺术探索>> 第一章 Actiivty的生命周期和启动模式
- Android版本和API Level
- 在android中读取word、excel、pdf
- Android自定义控件
- Android中的动态加载机制