1、activity
它是 android 应用程序的基本功能单元。一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照。Activity 本身是没有界面的。activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上。每一个activity给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
一个应用程序(APK文件)通常由多个activities组成,他们通常是松耦合关系。通常,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个activity。每一个activity然后可以启动另一个activity为了完成不同的动作。每一次一个activity启动,前一个activity就暂停或停止了,但是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。这些状态转换都是activity的生命周期的部分。
要理解activity的生命周期,首先需要明白activity的四种状态
一、Active/Runing (活动的/运行状态) 最直接的表现是:它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
二、Paused(暂停) 最直接的表现是:它仍然可见,但它已经失去了焦点故不可与用户交互。例如被一个透明样式的 Activity 覆盖的状态或者弹出dialog(对话框)时;此时它依然与窗口管理器保持连接,系统继续维护其内部状态,但是不能与用户交互,不能操作;
三、Stop(停止) 最直接的表现是: 处于完全不可见的Activity,被另一个Activity完全覆盖,比如从一个activity1跳转到另外一个Activity2,Activity2(可见)处于屏幕的顶端并完全覆盖了activity1
四、Killed(销毁或结束) : 被系统杀死回收或者没有被启动时处于 Killed 状态。
知道了activity的四种状态,下面来理解activity的生命周期
一个应用程序与用户交互(如打开Android新闻客户端,浏览新闻)
首先展现的是一条一条的新闻列表 其经历:activity的生命周期
onCreate:在这里创建界面,做一些数据的初始化工作。例如创建指定Activity的布局文件、数据的绑定等;
onStart: 当Activity处于可见时(即显示在屏幕上)将调用这个函数;
onRestart:当Activity从停止状态进入活动状态前,将调用这个函数;
onResume:当Activity获得焦点,也就是说Activity能够与用户交互的时候将调用这个函数,这个时刻Activity位于Activity栈的顶端
onPause:当Activity进入暂停状态将调用这个函数,但在这个时刻我们一般用来保存持久的数据或者释放占用的资源。
onStop:当Activity完全被遮时将调用这个函数,
onDestory:当Activity在被终止前,即将进入非活动状态前,将调用该函数,一般以下两种情况下会调用onDestory函数1、调用Activity的finish方法2、当Android系统资源不足的时候
下面来自网络
从下面的日志日志可以看出区别:
1.从FirstActivity跳到SecondActivity时
FirstAcvity ---> onCreate
FirstAcvity --->onStart
FirstAcvity --->onResume
FirstAcvity --->onPause
SecondActivity--->onCreate
SecondActivity--->onStart
SecondActivity--->onResume
FirstAcvity --->onStop
现在给AndroidMainfest.xml中的SeconedActivity属性加入android:theme="@android:style/Theme.Dialog",则SeconedActivity将以对话框形式出现,不会对FirstAcvity形成遮盖.
这时的状态输出为:
FirstAcvity ---> onCreate
FirstAcvity --->onStart
FirstAcvity --->onResume
FirstAcvity --->onPause
SecondActivity--->onCreate
SecondActivity--->onStart
SecondActivity--->onResume
这时FirstAcvity比完全遮盖时少调用了onStop方法.
以下两种情况下 都只会触发onPause而不会触发onStop
1. 一个透明的包含Dialog的Activity 出现
2. 按poweroff锁屏
显示一个非activity的Dialog,是不会调用onPause和onStop的,因为此Dialog属于activity