Activity的4种启动模式
来源:互联网 发布:eclipse编译java 编辑:程序博客网 时间:2024/04/27 21:22
Activity是android应用程序中比较重要的一个组件,Activity的生命周期网上也有很多的,讲解的也很到位和精彩,自己在学习Activity的启动模式时,在网上看了很多人的博客还是感觉没有弄明白,经过多次看大牛的博客和自己敲代码实现各种启动模式下的Activity的实例,自己也算清楚了点。现在分享下自己的理解Activity的启动模式。
Android的系统中Activity的启动模式有4种,分别是
1.standard
2.singleTop
3.singleTask
4.singleInstance
Activity的启动模式在Activity的跳转(startActivity(Intent))中有着很特殊的作用,它决定这这次启动Activity是否要生成新的实例,
是否重用已经存在的Activity实例,是否和其它Activity公用一个Task,或者是否重新生成一个新的的Task。
上面说道Task,为了弄清楚Activity的launch模式,首先先来了解下,Task和Activity的区别和联系:
Task是一个类似于数据结构中的栈的实例,一个Task可以放置多个Activity的实例,Task管理Activity的创建和销毁,或者可以理解为Task是一个Activity的容器。默认情况下,当一个应用程序启动,会创建一个以之对应的Task来管理Activity实例,一个Activity启动另外一个Activity是,默认情况下(singleInstance除外),2个Activity是放在用一个Task中,新启动的Activity被压入启动Activity的Task栈中,单用户点击back键后,新Activity从Task栈中出栈,开始的Activity就处在栈顶,显示在屏幕上。注意:
Task和Task之间是相互独立的,当一个程序运行时,点击home键,然后在去启动另外一个应用程序,整个过程中Task来回切换,开始的Task被转移到后台(任然保留这Task里面的所有Activity),新启动的Task被移到前台,当再次点击Home键时,重新启动先前的应用程序,2个Task在前台和后台相互切换。Task保存了所有的Activity实例。说这么多,实际上Task就是Activity的管理的一个栈。不同的启动模式,对应这不同的管理方式。
接下来正式进入Activity的启动模式详解
Activity的启动模式在manifest文件中注册,<activity>标签中注册。
1. standard
这种方式是Activity的默认启动方式,可以在manifest文件中注册和不注册。
这种启动方式是最简单的,也是采用最多的。
下面的代码是FirstActivity的standard的启动模式。
下面代码是FirstActivity的布局文件
manifest文件中未对FirstActivity的注册启动模式,默认是Standard
接下里的图片是运行程序后的得到实例,通过观察Activity的实例来分析Activity的启动模式,如下图:
本来计划一篇全部写完Activity的启动模式,不知不觉中快1点了,明天还要上班,就先到这把。明天有空,我续上。
Android的系统中Activity的启动模式有4种,分别是
1.standard
2.singleTop
3.singleTask
4.singleInstance
Activity的启动模式在Activity的跳转(startActivity(Intent))中有着很特殊的作用,它决定这这次启动Activity是否要生成新的实例,
是否重用已经存在的Activity实例,是否和其它Activity公用一个Task,或者是否重新生成一个新的的Task。
上面说道Task,为了弄清楚Activity的launch模式,首先先来了解下,Task和Activity的区别和联系:
Task是一个类似于数据结构中的栈的实例,一个Task可以放置多个Activity的实例,Task管理Activity的创建和销毁,或者可以理解为Task是一个Activity的容器。默认情况下,当一个应用程序启动,会创建一个以之对应的Task来管理Activity实例,一个Activity启动另外一个Activity是,默认情况下(singleInstance除外),2个Activity是放在用一个Task中,新启动的Activity被压入启动Activity的Task栈中,单用户点击back键后,新Activity从Task栈中出栈,开始的Activity就处在栈顶,显示在屏幕上。注意:
Task和Task之间是相互独立的,当一个程序运行时,点击home键,然后在去启动另外一个应用程序,整个过程中Task来回切换,开始的Task被转移到后台(任然保留这Task里面的所有Activity),新启动的Task被移到前台,当再次点击Home键时,重新启动先前的应用程序,2个Task在前台和后台相互切换。Task保存了所有的Activity实例。说这么多,实际上Task就是Activity的管理的一个栈。不同的启动模式,对应这不同的管理方式。
接下来正式进入Activity的启动模式详解
Activity的启动模式在manifest文件中注册,<activity>标签中注册。
1. standard
这种方式是Activity的默认启动方式,可以在manifest文件中注册和不注册。
这种启动方式是最简单的,也是采用最多的。
下面的代码是FirstActivity的standard的启动模式。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package
com.star.launchmode;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.view.Menu;
import
android.view.View;
import
android.widget.TextView;
public
class
FirstActivity
extends
Activity {
private
TextView text;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
text.setText(
this
.toString());
}
public
void
gotoActivity(View view) {
Intent i =
new
Intent();
i.setClass(
this
, FirstActivity.
class
);
startActivity(i);
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return
true
;
}
}
下面代码是FirstActivity的布局文件
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
tools:context
=
".MainActivity"
>
<
TextView
android:id
=
"@+id/text"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:textColor
=
"#000"
android:text
=
"@string/hello_world"
/>
<
Button
android:id
=
"@+id/button"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:layout_below
=
"@id/text"
android:text
=
"GotoActivity"
android:textColor
=
"#000"
android:onClick
=
"gotoActivity"
/>
<!-- android:layout_centerHorizontal="true"
android:layout_centerVertical="true" -->
</
RelativeLayout
>
manifest文件中未对FirstActivity的注册启动模式,默认是Standard
接下里的图片是运行程序后的得到实例,通过观察Activity的实例来分析Activity的启动模式,如下图:
我们注意到都是FirstActivity的实例,但序列号不同,并且我们需要连续按后退键两次,才能回到第一个FristActivity。standard模式的原理如下图所示:
如图所示,每次跳转系统都会在task中生成一个新的FirstActivity实例,并且放于栈结构的顶部,当我们按下后退键时,才能看到原来的FirstActivity实例。
这就是standard启动模式,不管有没有已存在的实例,都生成新的实例。
本来计划一篇全部写完Activity的启动模式,不知不觉中快1点了,明天还要上班,就先到这把。明天有空,我续上。
- Activity的4种启动模式
- Activity的4种启动模式
- android activity的4种启动模式
- 4种activity的启动模式
- Android Activity的4种启动模式
- Activity的4种启动模式
- activity的4种启动模式
- Activity的4种启动模式
- Activity的4种启动模式
- activity的启动模式:4种
- 4种activity 的启动模式
- Activity的4种启动模式
- Activity的4种启动模式
- Activity的4种启动模式
- Activity的4种启动模式
- Activity 的4种启动模式
- Activity的4种启动模式
- activity的4种启动模式
- 长方柱
- 《鸟哥的linux私房菜 基础篇》第八章读书笔记(上)
- VB.Net机房收费系统个人版总结
- 【程序56】画图,学用circle画圆形
- 多对多,sql语句写法
- Activity的4种启动模式
- 【程序57】画图,学用line画直线
- 桶式排序
- 使用VS2010编译QT
- 对比Chrome 中的单例模式和公司中的单例模式体会到google代码的优雅
- SDN(1)
- LightOj 1111 - Best Picnic Ever
- 对象的锁定标志
- 归并排序