Activity
1: Activity是支持显示UI的, 但不直接管理view树或者ViewRoot, Activity并没有与这两者产生直接的联系, 是通过中间 “Window”的对象来控制管理的。
2: 生命周期:状态图 onCreate---onStart---onResume---onPause----onStop---onDestory
onResume -----ui处于可以和用户交互的状态,获取到焦点
OnPause----- 失去焦点 (比如被一个透明的activity,或者非全屏的activity给覆盖)
OnStop------停滞状态,activity完全被另外一个activity覆盖,不可见,但是成员变量一直都保持
OnDestory ------只有主动回调finish 或者杀死应用才会调用,这个时候会回收activity的成员变量等
哪些场景会调用哪些函数:
2.1 锁屏或者home键到主屏 时回调: onPause ---onStop
开屏:onRestart---onstart---onResume ,系统内存不足,activity被杀死,回来时
仍然会调用onCreate
2.2 Dialog弹框不会引起activity的 生命周期再次执行,但activity如果是一个非全屏的,会调用onPause
2.3 在系统内存不足时,系统会杀死后台activity,此时会触发 onSaveInstance回调,可以回调此方法保存一些变量
2.4 onCreate 不应该做过的的繁重操作,onPause不应该做耗时操作,onStop移除网络请求回调和动画
2.5 横屏或者竖屏的切换,通过配置configChange = orientation|keyboardHidden
可以不回调activity生命周期,只会回调 onConfigurationChanged函数
2.6 activity A ---->启动activity B : A 先回调onPause函数,然后回调B的 onCreate--onStart---onResume. 然后回调A的 onStop
3:启动模式
通过xml配置,intent跳转的时候带上flag, (当然动态指定比静态配置优先级要高)
Standard : 无论这个activity实例是否存在,启动的时候按照 onCreate---onResume 等
启动流程,遵守先进后出原则
SingleTop :栈顶复用,如果这个acitviity在栈顶,那么再次启动时,不会走onCreate流程,但是会调用onNewIntent() (因为getInten有可能是旧的数据)
SingleTask: 栈内复用,如果这个activity已经在栈内,再次启动,不会不会走onCreate流程,但是会调用onNewIntent(), 并且将他上面的activity移除
SingleInstance : 新建一个任务栈,application全局只有一个实例,这个实例独立运行在一个task中,这个task不允许有其他实例
设置Activity窗口模式,透明模式,对话框样式
1:怎样理解窗口模式?activity配置如下属性:android:theme="@android:style/Theme.Dialog"
setFinishOnTouchOutside(false) 来保证点击窗口外不被finish
2:透明模式
只需要在Manifest中需要透明的Activity内设置theme为以上任意一个就可以了
<activity
an
<activity
android:name=".activity.SearchActivity"
android:theme="@android:style/Theme.Translucent" />
oid:name=".activity.SearchActivity"
andoid:theme="@android:style/Theme.Translucent" />
常见的theme主题样式
•android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式
•android:tme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
•android:them
•android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式
•android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
•android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
•android:theme="Theme.Light" 背景为白色
•android:theme="Theme.Light.NoTitleBar" 白色背景并无标题栏
•android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
•android:theme="Theme.Black" 背景黑色
•android:theme="Theme.Black.NoTitleBar" 黑色背景并无标题栏
•android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
•android:theme="Theme.Wallpaper" 用系统桌面为应用程序背景
•android:theme="Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
•android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
•android:theme="Translucent" 半透明
•android:theme="Theme.Translucent.NoTitleBar"
•android:theme="Theme.Translucent.NoTitleBar.Fullscreen"
•android:theme="Theme.Panel"
e="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
•android:theme="Theme.Light" 背景为白色
•android:theme="Theme.Light.NoTitleBar" 白色背景并无标题栏
•android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏
•android:theme="Theme.Black" 背景黑色
•android:theme="Theme.Black.NoTitleBar" 黑色背景并无标题栏
•android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏
•android:theme="Theme.Wallpaper" 用系统桌面为应用程序背景
•android:theme="Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏
•android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏
•android:theme="Translucent" 半透明
•android:theme="Theme.Translucent.NoTitleBar"
•android:theme="Theme.Translucent.NoTitleBar.Fullscreen"
•android:theme="Theme.Panel"
•android:theme="Theme.Light.Panel"
拓展:
Context :
1:描述应用程序环境的信息,即上下文
2: Activity 和Application都是Context子类
注意activity维护的时候当前页面的生命周期,Application维护的是整个应用的生命周期
3: Context是抽象类,实现类是ContextWrap和ContextImpl . 其中Application和Service继承ContextWrap 。 Activity继承ContextWrapTheme . ContextWrapTheme 继承ContextWrap
Intent数据传递:
Intetnt传递的数据类型:8中基本数据类型
3.1 整数型:byte(8位)、short(16位)、int(32位)、long(64位)
浮点型:float(32位)、double(64位)
字符型:char(16位)
布尔型:boolean(1位)
3.2 String (默认实现了Serializable )
3.3 实现Parcelable对象及数据
传递的数据大小
StartActivity的数据会经过 系统进程AMS中的函数实现,ams实现完毕之后,回调应用进程activity的相关生命周期函数,所以intent数据会经过ams进程到app进程,所以会涉及到Binder通信。而用户进程所映射的Binder内存大小是不到1M 的,否则会抛出异常
替代方案:
1: 写入临时文件或者数据库。
2:设置静态类中的静态变量进行数据交换。保证内存中只有一份