Intent补充知识

转自:https://blog.csdn.net/boguesfei/article/details/80431718
通过getIntent()获得的Intent用于开启Activity(Activity开启本身)时,观察发现Activity不会走onDestroy()方法.

那么以下两种获得Intent的方法在开启Activity时,有什么本质区别吗?

Intent intent1 = getIntent(); //此方法在MainActivity中调用

Intent intent2 = new Intent(MainActivity.this, MainActivity.class);

如果利用intent2去startActivity() 那么会开启一个全新的Activity

如果用intent1 则不会.

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

如果是这样定义, 而且又是直接startActivity(getIntent()), 那肯定是不行的, 因为系统默认是以Launcher(应用入口)的行为来创建Intent的, 并且在已经启动应用的情况下, 是不会任何反应的(若已经切换到后台, 那么调用时就会将该应用切换回前台). 而startActivity(new Intent(…))则没有上述问题.

另外, onDestroy()并不是启动新Activity就会被调用的, 除非声明了android:noHistory="true"或者FLAG_ACTIVITY_CLEAR_TOP/FLAG_ACTIVITY_CLEAR_TASK之类的flag.

关于Flag(标志,或者模式),请看Intent.addFlags() 启动Activity的20种flags全解析
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//有了这个,即可打开同个app好多次,而不会出现问题。

另外intent还能打开外部包的活动类,请看intent打开外部程序、setClassName和 ComponentName 区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值