android - 通过getIntent()获得的Intent有什么特殊的吗?
伊谢尔伦
伊谢尔伦 2017-04-18 09:04:59
[Android讨论组]

通过getIntent()获得的Intent用于开启Activity(Activity开启本身)时,观察发现Activity不会走onDestroy()方法.

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

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

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

如果利用intent2startActivity() 那么会开启一个全新的Activity
如果用intent1 则不会.

看了下源码,但是由于本人太水,没有找到判断用于开启ActivityIntent是否是attach()Activity上的这个逻辑,所以比较困惑,望大神解答.

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
怪我咯

信息量太少, 题主没有贴出关键代码: AndroidManifest.xml中对该Activity的声明部分. 那就只能靠猜的了.

看题主描述的内容, 以及Activity的行为, 对Activity的定义可能如下:

<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.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号