四种启动模式

原创 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四种启动模式

  • 2016年07月21日 09:41
  • 30.55MB
  • 下载

activity的四种启动模式

  • 2014年09月19日 12:02
  • 15KB
  • 下载

activty的四种启动模式

其实很基础了,但是由于用的不多,总是忘.所以自己总结总结记下来. standard 标准    多么标准的典型栈(后进先出),也是我们整天用的跳转方式.简单我都不知道该咋解...

Activity四种启动模式

  • 2016年01月04日 09:22
  • 184KB
  • 下载

Android中Activity的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。And...

Activity四种启动模式Demo

  • 2013年07月23日 11:00
  • 73KB
  • 下载

activity四种启动模式demon

  • 2016年09月27日 15:18
  • 5.96MB
  • 下载

Activity中的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。  ...
  • knlnzhao
  • knlnzhao
  • 2012年09月21日 17:46
  • 31147

Activity四种启动模式

  • 2016年08月26日 14:57
  • 391KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四种启动模式
举报原因:
原因补充:

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