Activity总结

目录

1.Activity生命周期

1)Activity生命周期

2)A页面->B页面时的生命周期:

3)子类继承父类Activity后,生命周期走势:会先走父类的,之后再走子类的 

2.清单文件设置Activity属性

1)设置显示的方向-screenOrientation属性:

2)configChanges属性

3)其余属性

3.启动模式

1)如何设置启动模式

2)4种启动模式

4.异常状态数据保存

1)调用时机

2) 数据保存及取出

5.Activity切换添加动画

1)简单的滑进滑出动画

         2)淡入淡出+分解动画+共享元素动画


1.Activity生命周期

1)Activity生命周期

oncreat:进行Activity的一些初始化工作,比如使用setContentView加载布局,对一些控件和变量进行初始化等。但是由于此状态的Activity不可见,那么一些动画的初始化放这就显示不妥。

onstart:此时Activity已经可见了,但是还没出现在前台,我们还看不到,无法与Activity交互。

onresume:Activity在这个阶段已经出现在前台并且可见了。

onpouse:切换Activity,back键,会走此方法,可做轻量资源释放

onstop:home和back键会走

ondestory:销毁数据

onrestart:home键回来或者act切换回来

2)A页面->B页面时的生命周期:

A:craet-start-resume-pouse

B:creat-start-resume

A:stop

B:pouse-stop-destory

A:restart-start-resume(不走oncreat-走start)

3)子类继承父类Activity后,生命周期走势:会先走父类的,之后再走子类的 

父类oncreat
子类oncreat
父类onstart
子类onstart
父类onresume
子类onresume
......

2.清单文件设置Activity属性

1)设置显示的方向-screenOrientation属性:

"landscape"   横向显示(宽度比高度要大)

"portrait"   纵向显示(高度比宽度要大)

"unspecified"
默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。

"user"
使用用户当前首选的方向。

"behind"
使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。

"reverseLandscape"
与正常的横向方向相反显示,在API Level 9中被引入。

"reversePortrait"
与正常的纵向方向相反显示,在API Level 9中被引入。

"sensorLandscape"
横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。

"sensorPortrait"
纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。

"sensor"
显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,
显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,
就要使用fullSensor属性值。

"fullSensor"
显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为
“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,
但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。

"nosensor"
屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。
除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。

2)configChanges属性

在运行时发生配置更改时,默认情况下会关闭 Activity 然后将其重新启动,但使用该属性声明配置将阻止 Activity 重新启动。 Activity 反而会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。 

- “mcc” IMSI 移动国家/地区代码 (MCC) 发生了变化 - 检测到了 SIM 并更新了 MCC。 

- “mnc” IMSI 移动网络代码 (MNC) 发生了变化 - 检测到了 SIM 并更新了 MNC。 

- “locale” 语言区域发生了变化 — 用户为文本选择了新的显示语言。 

- “touchscreen” 触摸屏发生了变化。(这种情况通常永远不会发生。) 

- “keyboard” 键盘类型发生了变化 — 例如,用户插入了一个外置键盘。 

- “keyboardHidden” 键盘无障碍功能发生了变化 — 例如,用户显示了硬件键盘。 

- “navigation” 导航类型(轨迹球/方向键)发生了变化。(这种情况通常永远不会发生。) 

- “screenLayout” 屏幕布局发生了变化 — 这可能是由激活了其他显示方式所致。 

- “fontScale” 字体缩放系数发生了变化 — 用户选择了新的全局字号。 

- “uiMode” 用户界面模式发生了变化 — 这可能是因用户将设备放入桌面/车载基座或夜间模式发生变化所致。 请参阅 UiModeManager。 此项为 API 级别 8 中新增配置。 

- “orientation” 屏幕方向发生了变化 — 用户旋转了设备。 注:如果您的应用面向 API 级别 13 或更高级别(按照 minSdkVersion 和 targetSdkVersion 属性所声明的级别),则还应声明 “screenSize” 配置,因为当设备在横向与纵向之间切换时,该配置也会发生变化。 

- “screenSize” 当前可用屏幕尺寸发生了变化。它表示当前可用尺寸相对于当前纵横比的变化,因此会在用户在横向与纵向之间切换时发生变化。 不过,如果您的应用面向 API 级别 12 或更低级别,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重新启动 Activity)。 

- 此项为 API 级别 13 中新增配置。 
- “smallestScreenSize” 物理屏幕尺寸发生了变化。它表示与方向无关的尺寸变化,因此只有在实际物理屏幕尺寸发生变化(如切换到外部显示器)时才会变化。 对此配置的变更对应于smallestWidth 配置的变化。 不过,如果您的应用面向 API 级别 12 或更低级别,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重新启动 Activity)。 
- 此项为 API 级别 13 中新增配置。 

- “layoutDirection” 布局方向发生了变化。例如,从从左至右 (LTR) 更改为从右至左 (RTL)。 此项为 API 级别 17 中新增配置。 

常用的配置有如下locale,keyboard,keyboardHidden,screenLayout,fontScale,orientation

3)其余属性

alwaysRetainTaskState:
声明在根activity(也就是启动项的activity有效),其余无效。看默认false。应用切换后,如果30分钟后再打开,将不保存之前的最终信息。设置为true时,则一直保存。


autoRemoveFromRecents:
声明都有效。如果为true,则由此activity启动以及后续启动的activity 将不保存在最近使用的任务栏中。


clearTaskOnLaunch:
声明在根activity(也就是启动项的activity有效)。默认为false。如果为true,那么应用通过主页面图标再次启动应用,只会保留任务栈底部的activity,并且显示,其余全部销毁,底部activity可以不是启动项的activity


enabled:
application和activity 中都可声明。默认true,表示activity 可实例化,也就是可用,false表示不可用,这个activity就不能启动了。


excludeFromRecents:
声明在根activity(也就是启动项的activity有效),其余无效。如果为true,则该应用不会显示在最近使用的列表中。


exported:
Activity 是否可由其他应用的组件启动 —“true”表示可以,“false”表示不可以。若为“false”,则 Activity 只能由同一应用的组件或使用同一用户 ID 的不同应用启动。 
默认值取决于 Activity 是否包含 Intent 过滤器。没有任何过滤器意味着 Activity 只能通过指定其确切的类名称进行调用。 这意味着 Activity 专供应用内部使用(因为其他应用不知晓其类名称)。 因此,在这种情况下,默认值为“false”。另一方面,至少存在一个过滤器意味着 Activity 专供外部使用,因此默认值为“true”。 
该属性并非限制 Activity 对其他应用开放度的唯一手段。 您还可以利用权限来限制哪些外部实体可以调用 Activity(请参阅 permission 属性)。


finishOnTaskLaunch:
每当用户再次启动其任务(在主屏幕上选择任务)时,是否应关闭(完成)现有 Activity 实例 
True 为关闭。只要声明的都会被关闭,除了任务栈底部的activity。

hardwareAccelerated:
是否应为此 Activity 启用硬件加速渲染 —“true”表示应启用,“false”表示不应启用。 默认值为“false”。 
从 Android 3.0 开始,为应用提供了硬件加速 OpenGL 渲染器,以改善许多常见 2D 图形运算的性能。 启用硬件加速渲染器时,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数运算都会得到加速。这可以提高动画、滚动的流畅度和总体响应速度,即便是并不明确使用框架 OpenGL 库的应用也会受益。 由于启用硬件加速会增加资源消耗,因此您的应用将占用更多内存。


maxRecents:
达到该条目数时,系统会从概览屏幕中移除最近最少使用的实例。 有效值为 1-50(低内存设备使用 25);0 为无效值。 该值必须是整数,例如 50。默认值为 16。只对启动的根有效


multiprocess:
默认false。为true时可以在多个进程中创建实例。一个应用是一个进程。默认智能在自己app的进程中创建实例。更为广泛的是provider的声明,false 则多进程共享,ture,则有多个实例


noHistory:
默认false。为true表示该activity 进入不可见时便会自动销毁,调用finish(),那也就意味着这种定义的activity不会执行onActivityResult()。


permission:
自定义权限的方式,权限名称 


process:
如果为该属性分配的名称以冒号(“:”)开头,则会在需要时创建应用专用的新进程,并且 Activity 会在该进程中运行。如果进程名称以小写字符开头,Activity 将在该名称的全局进程中运行,前提是它拥有相应的权限。这可以让不同应用中的组件共享一个进程,从而减少资源占用。


supportsPictureInPicture:
指定 Activity 是否支持画中画 显示。如果 android:resizeableActivity 是 false,系统会忽略该属性。 该属性是在 API 级别 24 添加的。


stateNotNeeded:
默认false。为true,表示不保存状态重新启动,也就是不会执行onsaveInstanceState()。 
“true”设置可确保 Activity 能够在未保留状态时重新启动。 例如,显示主屏幕的 Activity 可以使用该设置来确保其由于某种原因崩溃时不会被移除。


resizeableActivity:
默认true。指定应用是否支持多窗口显示。您可以在 或 元素中设置该属性。 
如果您将该属性设置为 true,则用户可以分屏和自由形状模式启动 Activity。 如果您将该属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。

3.启动模式

1)如何设置启动模式

给<activity></activity>标签内部加上android:launchMode=""即可。

或者通过给Intent设置addflags(INTENT.FLAG_ACTIVITY_NEW_TASK),此优先级高。

2)4种启动模式

a.standard

默认的启动模式。生成新的实例

b.singletop-栈顶复用

位于栈顶,则重复利用,不在就生成新的实例

c.singletask-栈中只存在单个任务

此Activity实例之上的其他Activity实例通通出栈,使此Activity实例成为栈顶对象

d.singleInstance-全局单例模式

整个系统中只会创建一次这个activity的实例,并且单独为此activity开一个栈

4.异常状态数据保存

1)调用时机

activity容易被销毁时才会调用onSaveInstanceState方法去保存数据,但是主动finish和按back键不触发。比如:

1、当用户按下HOME键时。

2、长按HOME键,选择运行其他的程序时。

3、按下电源按键(关闭屏幕显示)时。

4、从activity A中启动一个新的activity时。

5、屏幕方向切换时,例如从竖屏切换到横屏时。

2) 数据保存及取出

通过参数bundle去存储信息,只能保存一些简单的数据,比如控件的状态等。调用保存数据的时机会在onstop()方法前。

保存方法如下:

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);

String string = "保存字符串";
outState.putString("Activity", string);
}

取值方式1-通过onCreate方法中参数Bundle取值,但是记得要判空:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            String oldString = savedInstanceState.getString("Activity");
        }      
}

取值方式2:

@Override 

public void onRestoreInstanceState(Bundle savedInstanceState) { 
  super.onRestoreInstanceState(savedInstanceState);
     String oldString = savedInstanceState.getString("Activity");
}

5.Activity切换添加动画

1)简单的滑进滑出动画

a.先在res文件夹下建立anim文件夹,然后在里面建立fade_in.xml和fade_out.xml两个动画资源

fade_in.xml
<?xml version="1.0" encoding="utf-8"?>  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="300"  
    android:fromAlpha="0.0"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:toAlpha="1.0" />  


fade_out.xml
<?xml version="1.0" encoding="utf-8"?>  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="300"  
    android:fromAlpha="1.0"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:toAlpha="0.0" />  

b.然后在values文件夹下的styles.xml中的resources标签内写:

<style name="Anim_fade" parent="android:Theme.NoTitleBar">  
       <item name="android:windowAnimationStyle">@style/fade</item>  
</style>  
  
<style name="fade" parent="@android:style/Animation.Activity">  
       <item name="android:activityOpenEnterAnimation">@anim/fade_in</item>  
       <item name="android:activityOpenExitAnimation">@anim/fade_out</item>  
       <item name="android:activityCloseEnterAnimation">@anim/fade_in</item>  
       <item name="android:activityCloseExitAnimation">@anim/fade_out</item>  
</style>  

c.清单文件中Activity的使用

<activity  
     android:name="com.example.mc.MainActivity"  
     android:theme="@style/Anim_fade" >  

2)淡入淡出+分解动画+共享元素动画

https://blog.csdn.net/w630886916/article/details/78319502(转)

猜你喜欢

转载自blog.csdn.net/qq_37321098/article/details/81531364
今日推荐