android 的四种启动模式

activity的启动模式很简单,只有四种:

1.standard,标准模式也是默认模式。

android:launchMode="standard"
当你在清单文件中没有给activity设置启动模式时,默认的就是standard模式。该模式有一个特点就是在一个app的activity栈中可以存在多个。
Intent intent = new Intent(MainActivity.this, MainActivity.class);
                startActivity(intent);
每运行一次 startActivity()方法时,栈中就会出现一个activity的实例

2.当一个activity的实例在栈顶的时候,不想在添加activity的实例我们还可以选择第二种activity的启动模式,

android:launchMode="singleTop"
再次运行startactivity方法时,

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("tag", "MainActivity   onCreate");
        initview();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.i("tag", "MainActivity  onNewIntent");
    }
打印结果:
10-26 17:39:57.806 6260-6260/com.myanimationapplication I/tag: MainActivity   onCreate
10-26 17:40:02.615 6260-6260/com.myanimationapplication I/tag: MainActivity  onNewIntent
可以看到程序没走 onCreate,只是走了onnewintent方法, 但是当栈顶不是该activity的实例时,跳转到MainActivity 时程序还是会走oncreate方法的  

3.假如我想无论跳转到mainactivity多少次,这个栈中只有一个mainactivity实例,应该怎么破?这样我们就需要用到第三种启动模式,

android:launchMode="singleTask"
当mainactivity设置为singletask启动模式时,无论从哪个activity跳到 mainactivity,程序都不回再次走oncreate方法,而且还会把栈中mainactivity实例上端的其他activity实例销毁掉,

mainactivity代码:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("tag", "MainActivity   onCreate");
        initview();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.i("tag", "MainActivity  onNewIntent");
    }
MySecondActivity代码重写一个ondestroy方法,如下:
  @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("tag", "MySecondActivity   onDestroy");
    }
打印结果:

 
10-26 17:51:35.080 18824-18824/? I/tag: MainActivity   onCreate
10-26 17:52:41.080 18824-18824/com.myanimationapplication I/tag: MainActivity  onNewIntent
10-26 17:52:41.081 18824-18824/com.myanimationapplication I/tag: MainActivity  onRestart
10-26 17:52:41.410 18824-18824/com.myanimationapplication I/tag: MySecondActivity   onDestroy
可以看出日志纸打印了一次oncreate,在跳回 MainActivity时走了 onNewIntent方法和onRestart方法,而且 MySecondActivity调用了ondestroy
 
<span style="font-family: Arial, Helvetica, sans-serif;">4.第四种启动模式:
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Consolas';font-size:12.0pt;"><span style="color:#9876aa;">android</span><span style="color:#bababa;">:launchMode=</span><span style="color:#6a8759;">"singleInstance"</span>
 之前的三种启动模式只是app内部的交互,singleInstance模式就涉及到和其他的app进行交互。设置为这种模式的activity就可以和其他的app共享这个activity。该activity的实例不会出现在 
该app的栈中而是会新建一个栈。 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值