四种启动模式

原创 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的四种启动模式及使用场景

standard、singleTop、singleTask、singleInstance 默认Activity为standard标准模式,多次启动同一个Activity时,系统会创建多个实例,在这种模...
  • Liu_yunzhao
  • Liu_yunzhao
  • 2017-10-16 22:47:25
  • 1124

Activity四种启动模式的区别

Activity四种启动模式的区别
  • wg243964183
  • wg243964183
  • 2016-10-11 09:53:48
  • 348

Activity的四种启动模式详解

通过一个小例子可以更好的理解Android四种启动模式的工作原理,大家都知道应用运行起来后在线程中会创建一个任务栈,当不同的Activity实例创建后就会放入该任务栈中。栈的工作机制是先进后出。 我...
  • newcreate
  • newcreate
  • 2015-11-22 22:31:58
  • 246

Activity四种启动模式的特点

一.Activity四种启动模式的特点 1.standard模式  Activity默认的启动模式,依次入栈出栈,满足"先进后出"的原则。这种模式下,可以有多个相同的实例,也允许多个相...
  • ASHQMR
  • ASHQMR
  • 2017-03-31 18:38:27
  • 100

Android学习之Activity的四种启动模式与特点

Acitivty的四种启动模式与特点activity有四种启动模式,分别为: standard singleTop singleTask singleInstance 可以和activity的fla...
  • u011726984
  • u011726984
  • 2015-10-27 23:36:20
  • 3052

在程序开发中必须了解Activity的四种启动模式

Activity的启动模式有四种,分别是standard、singleTop、singleTask和singleInatance。在AndroidMainfest.xml中,通过标签的android:...
  • lxn_1221
  • lxn_1221
  • 2017-03-24 11:12:33
  • 319

Activity的四种启动模式-图文并茂eclipse设置详解

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 ...
  • Guofengpu
  • Guofengpu
  • 2016-07-28 19:57:24
  • 550

LaunchMode

  • 2017年06月22日 15:44
  • 1.09MB
  • 下载

Activity四种启动模式说明

1,standard标准模式: 每次启动一个Activity都会重新创建一个实例,即调用Activity创建时的生命周期方法onCreate,onStart,onResume;被启动的Activity...
  • u011959433
  • u011959433
  • 2016-03-21 15:54:46
  • 3027

activity四种启动模式

  • 2016年08月31日 15:25
  • 44KB
  • 下载
收藏助手
不良信息举报
您举报文章:四种启动模式
举报原因:
原因补充:

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