您的位置:首页 > 移动开发 > Android开发

Android四大组件之activity

2015-07-26 11:30 573 查看
一、概念: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 所处的状态来改变其在栈中的位置。

standard

singleTop

singleTask

singleInstance

根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: