读书笔记--Activity的生命周期、加载模式,以及Fragment
2015-12-15 19:54
369 查看
启动Activity时,依次调用onCreate、onStart和onResume方法
当Activity有部分内容可见时,仅调用它的onPause方法 (如在该Activity中启动另一个不全屏的Activity)
关闭这个不全屏的Activity后,调用onResume方法
当下滑通知栏时,不启动onPause方法
全都不可见时,调用onPause和onStop方法
切回来后,依次调用onRestart、onStart和onResume方法
调用finish()方法结束该Activity后,依次调用onPause、onStop和onDestory方法
配置Activity时可以指定android:launchMode属性,用于配置加载模式
standard: 标准模式,每次启动都会创建一个新的实例,并被添加到当前Task中
singleTop: Task顶部单例模式,如果被启动的Activity在Task栈顶,将直接复用已有的Activity,否则同standard模式
singleTask: Task内部单例模式,如果在Task内存在Activity但不在栈顶,将把位于其上的所有Activity移出Task,然后复用该Activity,否则同singleTop模式
singleInstance: 全局单例模式,如果Activity已经存在,无论位于哪个应用程序中,无论位于哪个Task中,系统都会把该Activity所在的Task转到前台,从而使用该Activity。注意,使用该模式加载的Activity总是位于Task的栈顶,该Task只包含该Activity
Android采用Task来管理多个Activity,可以调用Activity的getTaskId()来获取它所在的Task的ID。Task可以被理解为Activity的栈,先启动的Activity放在栈底,后启动的放在栈顶
Fragment必须被“嵌入”Activity中使用,它的生命周期受该Activity的生命周期所控制,通过使用Fragment,可以方便地在平板等大屏幕上,并列显示内容,同时方便地兼容在小屏幕设备上的显示
Fragment可以调用getActivity获取它所在的Activity,Activity也可以用FragmentManager的findFragmentById或findFragmentByTag来获取Fragment
Activity可调用FragmentManager的add、remove、replace来管理Fragment
一个Activity可以同时组合多个Fragment,反过来一个Fragment也可以被多个Activity复用
Fragment可以响应自己的输入事件
通常创建Fragment需要实现如下三个方法:
onCreate:创建后回调该方法,一般只初始化想要保持的必要组件
onCreateView:绘制界面时回调该方法,必须返回一个View,即所显示的View
onPause:离开时回调
将Fragment添加到Activity中有如下两种方式:
在布局文件中用<fragment.../>元素添加,其中的android:name属性指定实现类
在代码中通过FragmentTransaction对象的add方法来添加
Activity向Fragment传递数据,可以调用Fragment的setArguments( Bundle bundle )传递
Fragment向Activity传递数据,或进行实时通信时,在Fragment中定义一个内部回调接口,再让Activity实现该接口,然后Fragment调用该方法即可
Fragment的生命周期中,共有如下方法:
onAttach:被添加到Activity时被回调,只会被调用一次
onCreate:创建时被回调,只会被调用一次
onCreateView:每次创建、绘制Fragment的View组件时回调
onActivityCreated:当Fragment所在的Activity被启动完成后,回调该方法
onStart:启动Fragment时被回调
onResume:恢复Fragment时被回调
onPause:暂停
onStop:停止
onDestroyView:销毁Fragment所包含的View组件时被调用
onDestroy:销毁Fragment时被回调
onDetach:将该Fragment从Activity中删除、替换完成时,回调该方法,只会被调用一次。onDestroy后一定会回调这个方法
当Activity有部分内容可见时,仅调用它的onPause方法 (如在该Activity中启动另一个不全屏的Activity)
关闭这个不全屏的Activity后,调用onResume方法
当下滑通知栏时,不启动onPause方法
全都不可见时,调用onPause和onStop方法
切回来后,依次调用onRestart、onStart和onResume方法
调用finish()方法结束该Activity后,依次调用onPause、onStop和onDestory方法
配置Activity时可以指定android:launchMode属性,用于配置加载模式
standard: 标准模式,每次启动都会创建一个新的实例,并被添加到当前Task中
singleTop: Task顶部单例模式,如果被启动的Activity在Task栈顶,将直接复用已有的Activity,否则同standard模式
singleTask: Task内部单例模式,如果在Task内存在Activity但不在栈顶,将把位于其上的所有Activity移出Task,然后复用该Activity,否则同singleTop模式
singleInstance: 全局单例模式,如果Activity已经存在,无论位于哪个应用程序中,无论位于哪个Task中,系统都会把该Activity所在的Task转到前台,从而使用该Activity。注意,使用该模式加载的Activity总是位于Task的栈顶,该Task只包含该Activity
Android采用Task来管理多个Activity,可以调用Activity的getTaskId()来获取它所在的Task的ID。Task可以被理解为Activity的栈,先启动的Activity放在栈底,后启动的放在栈顶
Fragment必须被“嵌入”Activity中使用,它的生命周期受该Activity的生命周期所控制,通过使用Fragment,可以方便地在平板等大屏幕上,并列显示内容,同时方便地兼容在小屏幕设备上的显示
Fragment可以调用getActivity获取它所在的Activity,Activity也可以用FragmentManager的findFragmentById或findFragmentByTag来获取Fragment
Activity可调用FragmentManager的add、remove、replace来管理Fragment
一个Activity可以同时组合多个Fragment,反过来一个Fragment也可以被多个Activity复用
Fragment可以响应自己的输入事件
通常创建Fragment需要实现如下三个方法:
onCreate:创建后回调该方法,一般只初始化想要保持的必要组件
onCreateView:绘制界面时回调该方法,必须返回一个View,即所显示的View
onPause:离开时回调
将Fragment添加到Activity中有如下两种方式:
在布局文件中用<fragment.../>元素添加,其中的android:name属性指定实现类
在代码中通过FragmentTransaction对象的add方法来添加
Activity向Fragment传递数据,可以调用Fragment的setArguments( Bundle bundle )传递
Fragment向Activity传递数据,或进行实时通信时,在Fragment中定义一个内部回调接口,再让Activity实现该接口,然后Fragment调用该方法即可
Fragment的生命周期中,共有如下方法:
onAttach:被添加到Activity时被回调,只会被调用一次
onCreate:创建时被回调,只会被调用一次
onCreateView:每次创建、绘制Fragment的View组件时回调
onActivityCreated:当Fragment所在的Activity被启动完成后,回调该方法
onStart:启动Fragment时被回调
onResume:恢复Fragment时被回调
onPause:暂停
onStop:停止
onDestroyView:销毁Fragment所包含的View组件时被调用
onDestroy:销毁Fragment时被回调
onDetach:将该Fragment从Activity中删除、替换完成时,回调该方法,只会被调用一次。onDestroy后一定会回调这个方法
相关文章推荐
- JAVA设计模式之代理模式
- Eclipse无法启动报An internal error occurred during: "reload maven project". java.lang.NullPointerException
- 学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder
- 服务器之间ssh无秘钥认证失败原因
- Nazo游戏(11-20关)
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题 http://blog.csdn.net/unituniverse2/article/details/12302139
- Java内存管理:深入Java内存区域(深入理解Java虚拟机的第2章内容,加上个人浅显理解)
- Runtime 、 Block
- poj 1821(DP+单调队列优化)
- windows php安装ImageMagick扩展
- C#中listview 选中一行并把对应的几列数据放到textbox中
- 美国人这样教育小学生
- hdoj5585Numbers
- JAVA设计模式之享元模式
- bzoj3620(KMP)
- NSDictionary 、 NSMutableDictionary
- 关于oracle with as用法
- NSArray(二) 、 NSMutableArray 、 NSSet 、 NSMutableSet
- 代码对比看:&& || %errorlevel%的区别
- 互联网协议入门(一)