通过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.
本文探讨了使用不同方式获取Intent启动同一Activity的区别。指出利用new Intent启动会创建全新实例,而getIntent()则不会。此外,文章还解释了onDestroy()方法的调用条件及与启动新Activity的关系。
1186





