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

Android学习之Activity启动模式

前言

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

standard
singleTask
singleTop
singleInstance

其中,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹振坤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值