【Android】20、活动的启动模式——singleTop

本篇博文最后修改时间:2016年5月17日,23:00。


一、简介

本篇介绍活动的启动模式——singleTop


二、实验平台
系统版本:Windows7 家庭普通版 32位操作系统。

三、版权声明
博主:思跡
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.net/omoiato

联系方式:315878825@qq.com

Java零基础入门交流群:541462902


四、singleTop

可能在有些情况下,我们会觉得standard 模式不太合理。

活动明明已经在栈顶了,为什么再次启动的时候还要创建一个新的活动实例呢?

别着急,这只是系统默认的一种启动模式而已,我们完全可以根据自己的需要进行修改,

比如说使用singleTop 模式。当活动的启动模式指定为singleTop,

在启动活动时如果发现返回栈的栈顶已经是该活动,

则认为可以直接使用它,不会再创建新的活动实例。


1、修改AndroidManifest.xml 中FirstActivity 的启动模式

<activity
    android:name=".FirstActivity"
    android:launchMode="singleTop"
    android:label="This is FirstActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

2、重新运行程序,查看LogCat 会看到已经创建了一个FirstActivity 的实例

但是之后不管你点击多少次按钮都不会再有新的打印信息出现,

因为目前FirstActivity已经处于返回栈的栈顶,

每当想要再启动一个FirstActivity 时都会直接使用栈顶的活动,

因此FirstActivity 也只会有一个实例,仅按一次Back 键就可以退出程序。
不过当FirstActivity 并未处于栈顶位置时,这时再启动FirstActivity,

还是会创建新的实例的。

 

3、修改FirstActivity 中onCreate()方法的代码

 

<pre class="java" name="code"><pre name="code" class="java" style="color: rgb(85, 85, 85); font-size: 18px; line-height: 35px;">
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    Log.d("FirstActivity", this.toString());
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.first_layout);
    Button button1 = (Button) findViewById(R.id.button_1);
    button1.setOnClickListener(new OnClickListener() 
    {
       @Override
       public void onClick(View v) 
       {
           Intent intent = new Intent(FirstActivity.this,
           SecondActivity.class); 
           startActivity(intent);
       }
    });
}

 

 

4、然后修改SecondActivity 中onCreate()方法的代码

 

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    Log.d("SecondActivity", this.toString());
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.second_layout);
    Button button2 = (Button) findViewById(R.id.button_2);
    button2.setOnClickListener(new OnClickListener() 
    {
         @Override       
         public void onClick(View v) 
         { 
              Intent intent = new Intent(SecondActivity.this,FirstActivity.class);
              startActivity(intent);
          }
    });    
}

 


这次我们点击按钮后启动的是SecondActivity。
我们在SecondActivity 中的按钮点击事件里又加入了启动FirstActivity 的代码。

 

5、重新运行程序,在FirstActivity 界面点击按钮进入到SecondActivity

 

6、在SecondActivity 界面点击按钮,又会重新进入到FirstActivity

系统创建了两个不同的FirstActivity 实例,这是由于在SecondActivity 中再次启动FirstActivity 时,

栈顶活动已经变成了SecondActivity,因此会创建一个新的FirstActivity实例。

现在按下Back 键会返回到SecondActivity,再次按下Back 键又会回到FirstActivity,
再按一次Back 键才会退出程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值