Android属性之launchMode(启动方式)上

昨天开通了原创认证,留言功能也就上线了,欢迎大家踊跃留言,言语上的激励也会是极大的动力


(*^__^*) …… Android启动方式(launchMode)一直是android开发中的重点部分,也是面试中经常会问到的知识点,所以初学者们一定要掌握这个知识点,在以后的开发中会大有裨益


启动方式一共有四种,本文先介绍前两种,后两种下一篇文章再介绍


1. Standard 模式(默认) 不设置launchMode属性时默认就是此方式,不管任务栈中有没有启动的Activity,每次通过Intent启动时都会重新启动一个新的Activity对象


首先通过一个实例来体验一下这种启动方式

MainActivity.java: package com.example.administrator.myapplication ; import android.app.Activity ; import android.content.Intent ; import android.support.v7.app.AppCompatActivity ; import android.os.Bundle ; import android.support.v7.widget.LinearLayoutCompat ; import android.util.Log ; import android.view.View ; import android.widget.Button ; import android.widget.LinearLayout ; import android.widget.Toast ; public class MainActivity extends Activity { private static final String TAG = “YAYUN” ; private Button mButton1 ; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState) ; setContentView(R.layout. activity_main ) ; Log. d ( TAG , “MainActivity-create:” + this ) ; mButton1 = (Button) findViewById(R.id. btn1 ) ; mButton1 .setOnClickListener( new View.OnClickListener() { @Override public void onClick (View v) { Intent intent = new Intent() ; intent.setClass(MainActivity. this, MainActivity. class ) ; startActivity(intent) ; } }) ; } @Override protected void onDestroy () { super .onDestroy() ; Log. d ( TAG , “MainActivity-destroy: ” + this ) ; } } 为了方便演示,就在当前Activity启动当前Activity,点击三次Log如下: 从log信息可以看出,算上运行项目时启动的MainActivity,一共启动了4个MainActivity,也可以看出来他们分别是不同的对象(对象ID不同)


这时我们也需要连续点击4次back键才能销毁所有的MainActivity,log信息如下: 2. SingleTop 模式 此方式在启动Activity之前会检验任务栈顶是否已存在当前实例,若已经存在了就不再重新创建,若不在栈顶仍会再次创建


修改AndroidMainifest.xml中MainActivity的启动方式,如下: 再次点击Button,可以看到log中不会再次启动MainActivity了


为了验证MainActivity不在栈顶的时候会再次启动,可以创建两个Activity,互相启动


MainActivity.java: protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState) ; setContentView(R.layout. activity_main ) ; Log. d ( TAG , “MainActivity-create:” + this ) ; mButton1 = (Button) findViewById(R.id. btn1 ) ; mButton1 .setOnClickListener( new View.OnClickListener() { @Override public void onClick (View v) { Intent intent = new Intent() ; intent.setClass(MainActivity. this, Activity2. class ) ; startActivity(intent) ; } }) ; } MainActivity启动Activity2,这时栈顶就是Activity2了


Activity2.java: public void launchMainActivity (View view){ Intent intent = new Intent( this, MainActivity. class ) ; startActivity(intent) ; } Activity2启动MainActivity,因为此时栈顶是Activity2,所以还会再次启动一次MainActivity,参考log如下: 可以看到启动了两个MainActivity




欢迎投稿 职场/创业方向. 邮箱wangfzcom(AT)163.com:王夫子社区 » Android属性之launchMode(启动方式)上

    标签:

点评 0

评论前必须登录!

登陆 注册