【Android】Activity启动模式
来源:互联网 发布:淘宝购物怎么返利 编辑:程序博客网 时间:2024/05/18 00:32
使用
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 Activity启动模式
- Android Activity启动模式
- Android Activity启动模式
- android activity 启动模式
- Android - Activity - 启动模式
- android Activity启动模式
- Android Activity启动模式
- 【Android】Activity启动模式
- android activity启动模式
- Android Activity启动模式
- Android Activity启动模式
- Android Activity启动模式
- Android Activity 启动模式
- android - Activity启动模式
- Android:Activity:启动模式
- android-activity启动模式
- 【Android】Activity启动模式
- Android activity 启动模式
- iOS本地数据存取,看这里就够了
- Android下拉刷新汽车加速仪表盘效果
- servlet web.xml 配置方式
- STL详解
- (java)Minimum Path Sum
- 【Android】Activity启动模式
- hdu5372 Segment Game (树状数组)
- 【Android】BroadcastReceiver的生命周期
- understanding the Euler Lagrange equation
- c++中map与unordered_map的区别
- LeetCode 226. Invert Binary Tree
- 多态
- (java)Rotate Image
- 【Android】Intent过滤器