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

来源:互联网 发布:女鞋设计软件 编辑:程序博客网 时间:2024/05/21 19:44

本篇博文最后修改时间: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;">@Overrideprotected 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 0
原创粉丝点击