-
Notifications
You must be signed in to change notification settings - Fork 780
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-09-02:Activity中onNewIntent方法的调用时机和使用场景? #138
Comments
当目标activity启动模式为singleTop的时候,并且目标activity之前已经存在了,这时启动目标activity就会走onnewintent方法 |
@DogLaShi 你的回答 还得加上 当 singleTop的activity在栈顶时的条件。 |
Activity 的 onNewIntent方法的调用可总结如下: 在该Activity的实例已经存在于Task和Back stack中(或者通俗的说可以通过按返回键返回到该Activity )时,当使用intent来再次启动该Activity的时候,如果此次启动不创建该Activity的新实例,则系统会调用原有实例的onNewIntent()方法来处理此intent. 且在下面情况下系统不会创建该Activity的新实例: 1,如果该Activity在Manifest中的android:launchMode定义为singleTask或者singleInstance. 2,如果该Activity在Manifest中的android:launchMode定义为singleTop且该实例位于Back stack的栈顶. 3,如果该Activity在Manifest中的android:launchMode定义为singleTop,且上述intent包含Intent.FLAG_ACTIVITY_CLEAR_TOP标志. 4,如果上述intent中包含 Intent.FLAG_ACTIVITY_CLEAR_TOP 标志和且包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志. 5,如果上述intent中包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志且该实例位于Back stack的栈顶. 上述情况满足其一,则系统将不会创建该Activity的新实例. 根据现有实例所处的状态不同onNewIntent()方法的调用时机也不同,总的说如果系统调用onNewIntent()方法则系统会在onResume()方法执行之前调用它.这也是官方API为什么只说"you can count on onResume() being called after this method",而不具体说明调用时机的原因. |
三个测试 默认启动模式为:
默认点击事件
至此证明只有当singleTop修饰的Activity X在栈顶时,再次启动Activity X则会走onNewIntent
|
Activity 的 onNewIntent方法的调用可总结如下: 在该Activity的实例已经存在于Task和Back stack中(或者通俗的说可以通过按返回键返回到该Activity )时,当使用intent来再次启动该Activity的时候,如果此次启动不创建该Activity的新实例,则系统会调用原有实例的onNewIntent()方法来处理此intent. 且在下面情况下系统不会创建该Activity的新实例: 1,如果该Activity在Manifest中的android:launchMode定义为singleTask或者singleInstance. 2,如果该Activity在Manifest中的android:launchMode定义为singleTop且该实例位于Back stack的栈顶. 3,如果该Activity在Manifest中的android:launchMode=“singleInstance”,或者intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)标志. 4,如果上述intent中包含 Intent.FLAG_ACTIVITY_CLEAR_TOP 标志和且包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志. 5,如果上述intent中包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志且该实例位于Back stack的栈顶. 上述情况满足其一,则系统将不会创建该Activity的新实例. 根据现有实例所处的状态不同onNewIntent()方法的调用时机也不同,总的说如果系统调用onNewIntent()方法则系统会在onResume()方法执行之前调用它.这也是官方API为什么只说"you can count on onResume() being called after this method",而不具体说明调用时机的原因. |
调用时机是为 Activity 设置了特殊的启动模式(主要是两种 single 模式)或者添加了可复用的 FLAG 时会调用,通俗讲就是当需要复用 activity 时会调用此方法。 |
各位大佬说的很好 我是小黑 |
onNewIntent的调用时机:只要该Activity实例在栈中存在,每次复用Activity的时候,都会调用onNewIntent,而不会重新创建Activity实例。 |
onNewIntent的调用时机:只要该Activity实例在栈中存在,每次复用Activity的时候,都会调用onNewIntent,而不会重新创建Activity实例。 |
No description provided.
The text was updated successfully, but these errors were encountered: