android基础知识 Activity

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:设置静态类中的静态变量进行数据交换。保证内存中只有一份

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页