四种启动模式

原创 2017年07月22日 04:03:46

1.怎么设置activity的启动模式.

 在Manifast.xml文件中添加android:launchMode="singleTask" 

<activity android:name=".MainActivity" android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

2.Activity四种启动模式
<1.standard
标准启动模式,也就是默认的模式,标准模式,每次都会创建一个实例,A启动A,还是会创建实例.

<2.singleTop  (适合接受通知启动的内容显示页面)
单一栈顶模式,在栈的顶部只能存在唯一的一个实例,及A启动A的话,就不会去创建实例.
<3.singleTask (可作为程序的入口,其他应用启动浏览器,只会启动主界面有一次,会清空主界面上面的其他页面)
单一实例模式,在栈里面只存在一个实例,如果已经存在,则将task中在他之上的activity destroy掉,并调用它的onnewintent.
程序一(TASK1):启动程序二
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("TAG", "onCreate: ------------------TASK1_on:"+getTaskId());
        Button button = (Button) findViewById(R.id.bt);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent =new Intent("com.viking.task2");
                startActivity(intent);

            }
        });
    }
    @Override
    protected void onNewIntent(Intent intent) {
        Log.e("TAG", "onNewIntent: ---------------TASK1_new:"+getTaskId());
        super.onNewIntent(intent);
    }
}
程序二(TASK2):程序2.1(MainActivity ),启动程序2.2(Second(为singletask启动模式))
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.bt);
        Log.e("TAG", "onCreate:------------------- TASK2.1_on:"+getTaskId());
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,Second.class);
                startActivity(intent);
            }
        });

    }

    @Override
    protected void onNewIntent(Intent intent) {
        Log.e("TAG", "onNewCreate:-------------------TASK2.1_new:"+getTaskId());
        super.onNewIntent(intent);
    }
}

public class Second extends AppCompatActivity {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Log.e("TAG", "onCreate: ---------------- TASK2.2_on:"+getTaskId());
    }

    @Override
    protected void onResume() {

        super.onResume();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        Log.e("TAG", "onNewIntent: ---------------TASK2.2_new:"+getTaskId());
        super.onNewIntent(intent);
    }
}

演示分为两种情况:
1.如果先启动TASK1,通过TASK1启动TASK2.1,再通过TASK2.1启动TASK2.2.
首先会先启动一个TASK1的任务栈,将TASK1存放进去,启动TASK2.1的时候,由于TASK2.1是Standard模式,所以将TASK2.1存进TASK1任务栈里面,
再通过TASK2.1启动TASK2.2,由于TASK2.2是SingleTask模式,所以是创建一个TASK2的任务栈,将TASK2.2存入,如果你此时打开TASK2程序,则
会显示TASK2.2页面,按返回键会直接退出TASK2程序(因为TASK2任务栈里面只有TASK2.2这个activity).

2.如果先启动TASK2程序,通过TASK2.1启动TASK2.2.按home键,再启动TASK1程序,再通过TASK1启动TASK2.1,再通过TASK2.1启动TASK2.2.
首先会先创建一个TASK2的任务栈,先将TASK2.1存入TASK2任务栈中,再启动TASK2.2的时候,由于是在同一程序中启动,所以不会去
创建新的任务栈,而是会直接将TASK2.2存入TASK2中.当启动TASK1程序的时候,会创建一个TASK1的任务栈,将TASK1存入栈中,再通过
TASK1启动TASK2.1的时候,这时会将TASK2.1存入TASK1中,再通过TASK2.1启动TASK2.2的时候,系统会查看是否有启动TASK2中的TASK2.2,由于
之前就启动了TASK2.2,所以就会跳到TASK2栈的TASK2.2,此时回退的话先是TASK2栈的TASK2.2>>TASK2栈的TASK2.1>>TASK1栈的TASK2.1
>>TASK1栈的TASK1



<4.singleInstance(适合与程序分离的页面如:来电页面,闹铃页面)
单一任务栈模式,创建一个独立的任务栈来存放该activity.

activity的四种状态说明

做完前期的零散的功能开发,需要将所有activity有机的khl
  • eclothy
  • eclothy
  • 2014年04月24日 12:04
  • 2236

GC的四种清理算法

标记-清除: 这是垃圾收集算法中最基础的,根据名字就可以知道,它的思想就是标记哪些要被回收的对象,然后统一回收。这种方法很简单,但是会有两个主要问题:1.效率不高,标记和清除的效率都很低;2.会产生...
  • cq340321
  • cq340321
  • 2017年05月31日 23:13
  • 193

uml中的四种关系

uml中的各种图都有几种关系,这几种关系的含义是什么都要弄的很清楚,才能更加清楚的理解uml中的图的意义。...
  • zhanghongjie0302
  • zhanghongjie0302
  • 2013年11月02日 19:00
  • 3152

Java的四种引用,强弱软虚,用到的场景

Java的四种引用,强弱软虚,用到的场景。   JDK1.2以前关于引用的解释,其存储的数值代表另外一块内存的起始地址(并根据类型决定数据占用了多少个字节),就称这块内存代表着一个引用。 JDK...
  • jingsuwen1
  • jingsuwen1
  • 2016年07月27日 14:03
  • 6022

Java四种单例设计模式

Java中的四种单例模式单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。1.饿汉式单例模式public class Singleton{ private static S...
  • twocold_2010
  • twocold_2010
  • 2016年11月20日 15:13
  • 181

【UML】三种事物 四种关系 九种图

前言 UML描述模型的内容分为三种,分别是事物、关系和图。 三者关系 事物 1.结构事物 类:类是具有相同属性、相同方法、相同语义和相同关系的一组对象的集合;接口:接口是指类和组件所...
  • lihepeng007
  • lihepeng007
  • 2015年11月08日 09:04
  • 1839

Java四种引用详解

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 1.强引用 本章前文介绍的引用实际上...
  • NicolasYan
  • NicolasYan
  • 2016年03月10日 00:20
  • 1777

深入浅出spring IOC中四种依赖注入方式

深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖...
  • u010800201
  • u010800201
  • 2017年05月24日 11:01
  • 591

android学习-动画(基本的四种动画)

先看段关于android中动画配置文件的伪代码: 现在来慢慢理清楚: xmlns:andr...
  • Main_Stage
  • Main_Stage
  • 2013年07月24日 11:47
  • 2493

AVL树的四种旋转--初步解析

> AVL树也叫作平衡树,它的每个节点 都有平衡因子: 平衡因子=右子树的高度-左子树的高度 AVL树的性质: 平衡因子大小为(-2,2),即-1,0,1 当一个节点插入后可能导致AVL树的不平衡,...
  • hm108106
  • hm108106
  • 2017年05月25日 18:39
  • 445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四种启动模式
举报原因:
原因补充:

(最多只允许输入30个字)