Android四大组件之activity
来源:互联网 发布:mysql 索引覆盖 编辑:程序博客网 时间:2024/06/06 00:03
一、概念:Activity本身是没有界面的。所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上.Activity继承了ApplicationContext这个类
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
二、生命周期:
1、三种状态:
- 运行:可见、可交互。它在屏幕最前端,处于栈的最顶端。Android会尽可能的维持它的状态,即使内存不足,Android也会杀死底层的activity,确保activity正常运行
- 暂停:可见、不可交互 。它依然与窗口管理器保持连接,系统继续维护其内部状态,如:一个透明或者 Dialog 样式的 Activity 覆盖时。
- 停止:不可见、不可交互。被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
2、常见的七个方法:
oOnCreate :一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。
onStart():方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。到这一步变成“用户可见”的状态;
onResume:变成和用户可见可交互的,(在Activity栈系统通过栈的方式管理这些Activity,即当前Activity在栈的最上端,运行 完弹出栈,则回到上一个Activity);
onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情。
onStop:变得不可见 也不可交互,被下一个activity覆盖了。
onRestart:用户后退回到此Activity,系统会先调用方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
onDestroy:这它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作onPause,onstop, onDestroy,三种状态下 activity都有可能被系统kill 掉.
onWindowFocusChanged:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。以上几种情况都会调用onWindowFocusChanged,并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用,如图所示:
onSaveInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用,无法保证什么时候发生,系统根据资源紧张程度去调度;(2)在用户改变屏幕方向时,此方法会被调用,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,可以保存一些临时数据;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调.用。 系统调用此方法是为了保存当前口窗各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。
onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。
3.常见操作函数执行的顺序
3.1..启动Activity: OnCreate -> onStart->onResume
3.2.跳转到其他Activity,或按下Home键回到主屏:onSaveInstanceState-> onPause-> onStop
3.3.从后台回到前台:onRestart->onStart->onResume
3.4弹出对话框或者锁屏:onSaveInstanceState-> onPause
3.5在对话框的界面返回:onResume
3.6退出: onPause-> onStop->onDestory
3.7屏幕翻转:onSaveInstanceState-> onPause-> onStop->onDestory->OnCreate -> onStart-> onRestoreInstanceState-> onResume(在AndroidManifest.xml中对指定的Activity设置android:screenOrientation="portrait",或者在onCreate方法中指定setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //竖屏 )
3.8为了避免这样销毁重建的过程,在AndroidMainfest.xml中对OrientationActivity对应的<activity>配置android:configChanges="orientation",然后我们再测试一下,然后做了3次的旋转。onConfigurationChanged->onConfigurationChanged->onConfigurationChanged
4.Activity 启动模式
Activity 栈
Android 是通过一种 Activity 栈的方式来管理 Activity 的,每个应用都有一个任务栈,是用来存放Activity的。除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。
singleTop
singleTask
singleInstance
standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例,并放入任务栈中。。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
singleTop
如果Activity在栈顶的时候,启动相同的不Activity,会创建新的实例,而会调用其onNewIntent方法。
两个Activity名为B1,B2。B1为standard,B2为singleTop。
打开的顺序为B1->B2->B2,则实际的顺序为B1->B2。
打开的顺序为B1->B2->B1->B2,则实际的顺序,为B1->B2->B1->B2。
singleTask
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity
destory掉并调用它的onNewIntent方法。
singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
有三个ActivityD1,D2,D3,三个Activity可互相启动,D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。
注意:
1、finish()先调用onPause、再调用oStop、最后调用oDestroy
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之 Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android 四大组件之Activity
- android 四大组件之activity
- Android 四大组件之 Activity
- android四大组件之Activity
- 使用 C# 开发智能手机软件:推箱子(十四)
- 海贼王之伟大航路解题报告
- java中的关键字super
- 动态维护数列的中位数
- HttpClient和HttpURLConnection的区别
- Android四大组件之activity
- 深入浅出CChart 每日一课——快乐高四第八课 懵懂的童年,返璞归真之Duilib窗口多区域绘图
- Kafka文件存储机制
- Web前端框架之图片轮播
- CSS 中 px,em和rem 的区别 学习笔记
- Docker学习2 - Docker图形用户界面
- 普通dos编码文件批量转换为UTF-8格式文件
- tomcat多应用之间如何共享jar
- uva 10976Fractions Again?!