Android学习教程(二)之Activity启动模式

来源:互联网 发布:微信大屏幕霸屏源码 编辑:程序博客网 时间:2024/06/05 19:13

Android学习之Activity启动模式

  • Android学习之Activity启动模式
    • 前言
    • 例子
    • Standard启动模式
    • SingleTop启动模式
    • SingleTask启动模式
    • SingleInstance
    • 总结
    • 附加知识点

前言

在进行更改Activity的启动模式时,主要是更改androidManifast.xml住文件中的activity的
launchMode属性,launchMode属性值可为:

standardsingleTasksingleTopsingleInstance

其中,launchMode为默认参数。

例子

为方便下面的说明,举个例子:
有两个activity
Aactivity.java:一个按键实现启动Aactivity,另一个按键实现启动Bactivity
相应的layout中有两个按键bt_1,bt_2

    //显示当前的栈Id,以及Activity实例的信息,有如下代码:    TextView tv = (TextView) findViewById(R.id.textview_1);    tv.setText(String.format("TaskID:%s,CurrentActivity:%s",getTaskId(),toString()));    /**     *启动另一个Aactivity     */    findViewById(R.id.bt_1).setOnClickListener(new OnClickListener(){        @Override        public void onClick(View v){            startActivity(Aactivity.this,Aactivity.class);        }    });     /**     *启动Bactivity     */    findViewById(R.id.bt_2).setOnClickListener(new OnClickListener(){        @Override        public void onClick(View v){            startActivity(Aactivity.this,Bactivity.class);        }    });

Bactivity.java:实现启动Aactivity
相应的layout中有一个按键bt_1

    //显示当前的栈Id,以及Activity实例的信息,有如下代码:    TextView tv = (TextView) findViewById(R.id.textview_1);    tv.setText(String.format("TaskID:%s,CurrentActivity:%s",getTaskId(),toString()));    /**     *启动从Bactivity中启动Aactivity     */    findViewById(R.id.bt_1).setOnClickListener(new OnClickListener(){        @Override        public void onClick(View v){            startActivity(Bactivity.this,Aactivity.class);          }    });

AndroidManifast.xml的launchMode属性值为:standard

1.Standard启动模式

以任务栈的形式进行activity的存储。当一直按Aactivity的bt_1时,会不断的生成Aactivity的实例。
配置如下:

<application    ……    <activity        android:launchMode="standard"        android:name=".Aactivity"        android:label="@string/title_activity_second"        android:theme="@style/AppTheme.NoActionBar">    </activity></application>

2.SingleTop启动模式

如果Aactivity的启动模式设置为SingleTop。那么,会根据Aactivity的位置进行实例的创建。
如果,Aactivity在栈顶,那么之创建单个实例;如果,Aactivity不再栈顶,那么就创建新的实例。
即。如果在Aactivity中点击了bt_2,到了Bactivity,然后,有点击bt_1,创建Aactivity的话,
会创建一个新的Aactivity。
配置代码:

    <activity        android:launchMode="singleTop"        android:name=".Aactivity"        android:label="@string/title_activity_second"        android:theme="@style/AppTheme.NoActionBar">    </activity>

3.SingleTask启动模式

这种启动模式下,如果,先点击Aactivity的bt_2进入Bactivity中,然后,点击Bactivity的bt_1,
创建Aactivity的话,则会将Bactivity推出栈顶,然后,显示之前的Aactivity实例。

4.SingleInstance

这种启动模式下,如果,创建另一个Activity,那么会创建一个新的Activity实例,并且,该Activity实例会
在一个新的独立的战中。
以上面据的例子解释就是,如果,在Aactivity中,点击那个bt_1,是不会有任何结果的;但是如果,点击bt_2的话,
创建的Bactivity实例所处的栈是和Aactivity所处的栈是完全不同的两个栈。

总结:

Activity的启动模式共有4种,
Standard、SingleTop、SingleTask、SingleInstance
Standard模式:其中,默认是Standard模式,在该模式下,每调用一次startActivity方法就会创建一个Activity实例;
SingleTop模式:当被设置为该模式的Activity在栈顶(当前显示的Activity就是该Activity)时,调
用startActiviy方法不会创建新的Activity,否则,创建新的Activity;
SingleTask模式:只会创建单一的Activity,如果要再次创建同一个Activity,系统会将该Activtiy之上的Activity推出
栈,来显示要创建的Activity。
SingleInstance模式:独立任务栈,同一个类型的Activity会在同一个栈中,且单一独立。如果,要创建另一个新的Activity的实例,会
重新创建一个栈,然后将新的Activity实例放入新的栈中。

附加知识点:

取消Layout界面组件上文字全大写。

    android:textAllCaps="false"

欢迎大家转载,转载时请注明出处。
SnowLive’s blogs
http://blog.csdn.net/snowlive

0 0
原创粉丝点击