android四大组件之Activity - (2)onNewIntent()的作用
2015-03-05 19:42
351 查看
要说onNewIntent(), 就不得不提到Activity的四种启动模式.分别是:
1, standard, 标准模式 (也是系统默认的模式)
每次都会新建Activity放置任务栈中.
2, singleTop 模式
这个模式能够确保每次使用的Activity都处于任务栈的栈顶.如果Activity已经处于栈顶则不再创建,否则会创建新的Activity实例并放置在栈顶.
3, singleTask 模式 - 常用的模式
如果当前栈中已经有该Activity ( 即使并不处于栈顶 ),则将该Activity之上的其他实例移除, 使它能处于栈顶.否则直接创建新的实例并放于栈顶.
4, singleInstance - 比较少用到
这个模式下会新建栈专门放Activity,使其他应用能够共享并访问该Activity.其他任何应用只要需要访问该Activity的实例都会进到该栈使用该Activity.
综合上面简述,singleTask是比较常用的模式, 因为它保证了栈中始终只有一个所访问的Activity实例,并且比较少存在其他没访问到的Activity.所以即使我们即使不是连续的多次访问某个Activity,也能保证它始终唯一.
而onNewIntent(Intent intent)方法就是提供给singleTask 模式这种特定实现的有效保持intent上下文的方法. 比如Activity A,首次访问A,并不会执行方法onNewIntent(), 而当用户退出A, 假如系统内存足够,没有在用户退出A之后Kill 掉A,而是短暂的继续保存A. 过了一小段时间,用户又打开A了, 这个时候A就会这么走: onNewIntent()---->onResart()------>onStart()----->onResume().
当然,如果A已经被系统回收了, 用户再打开A的时候 A就会从onCreate() 走正常的生命周期了.
要注意的是, 使用onNewIntent()时, 方法体内要使用setIntent( Intent intent )将系统的intent重新给予A, 不然后面调用getIntent() 可能为空.
1, standard, 标准模式 (也是系统默认的模式)
每次都会新建Activity放置任务栈中.
2, singleTop 模式
这个模式能够确保每次使用的Activity都处于任务栈的栈顶.如果Activity已经处于栈顶则不再创建,否则会创建新的Activity实例并放置在栈顶.
3, singleTask 模式 - 常用的模式
如果当前栈中已经有该Activity ( 即使并不处于栈顶 ),则将该Activity之上的其他实例移除, 使它能处于栈顶.否则直接创建新的实例并放于栈顶.
4, singleInstance - 比较少用到
这个模式下会新建栈专门放Activity,使其他应用能够共享并访问该Activity.其他任何应用只要需要访问该Activity的实例都会进到该栈使用该Activity.
综合上面简述,singleTask是比较常用的模式, 因为它保证了栈中始终只有一个所访问的Activity实例,并且比较少存在其他没访问到的Activity.所以即使我们即使不是连续的多次访问某个Activity,也能保证它始终唯一.
而onNewIntent(Intent intent)方法就是提供给singleTask 模式这种特定实现的有效保持intent上下文的方法. 比如Activity A,首次访问A,并不会执行方法onNewIntent(), 而当用户退出A, 假如系统内存足够,没有在用户退出A之后Kill 掉A,而是短暂的继续保存A. 过了一小段时间,用户又打开A了, 这个时候A就会这么走: onNewIntent()---->onResart()------>onStart()----->onResume().
当然,如果A已经被系统回收了, 用户再打开A的时候 A就会从onCreate() 走正常的生命周期了.
要注意的是, 使用onNewIntent()时, 方法体内要使用setIntent( Intent intent )将系统的intent重新给予A, 不然后面调用getIntent() 可能为空.
相关文章推荐
- [Android] 以singleInstance模式加载的Activity怎么接收以Bundle方式传递过来的参数 By onNewIntent() but not onResum
- [Android] 以singleInstance模式加载的Activity怎么接收以Bundle方式传递过来的参数 By onNewIntent() but not onResum
- Android activity onNewIntent触发时机
- [Android] 以singleInstance模式加载的Activity怎么接收以Bundle方式传递过来的参数 By onNewIntent() but not onResum
- [Android] 以singleInstance模式加载的Activity怎么接收以Bundle方式传递过来的参数 By onNewIntent() but not onResum
- android四大组件之Activity - (1)从源码中理解并巧用onWindowFocusChanged(boolean hasFocus)
- 【Android】 Activity启动模式singleTask的数据传输 onNewIntent方法
- Android-后台运行的Activity回到前台(onNewIntent()会替代onCreat()方法)
- [Android]Activity中的onNewIntent()方法
- Android activity onNewIntent触发时机
- Android-Activity中的onNewIntent()方法调用简析
- Android Activity中的onNewIntent的触发时机和注意事项
- 01 Android应用的构成 四大组件 Activity, Intent Receiver , Service , Content Provider
- Android心得2.4--四大组件之一--Activity
- 01 Android应用的构成 四大组件 Activity, Intent Receiver , Service , Content Provider
- Android四大组件之Activity
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
- Android四大组件之Activity
- Android心得2.4--四大组件之一--Activity
- Android onNewIntent的应用