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

Android初学之Activity(一)

2016-07-25 21:17 357 查看

Activity的概念理解

虽然,我们知道Activity是android的四大组件之一,但是我们能够很明确的定义Activity的概念?能知道这到底是什么东西吗?它仅仅是一个界面吗?

今天下午,自己琢磨了一段时间,在这里谈谈我个人的看法:

首先,我们一直ctrl+左击可以发现,Activity最终是继承自Context的,也就是说Activity最根本的是一个上下文或者说他是一个环境。

2.Activity的api文档中说到:An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView()。这表示,在Activity中UI界面十分重要,activity主要是通过UI与用户的交互去完成任务,但是由于activity是一个动态的过程,它是一个活动而不是真正意义上死板的UI,它包含了不同的生命周期。这就有有点类似进程和程序的区别,也就是说activity包含了UI界面。他通过setContentView来设置UI布局,我们发现:

/**
* Set the activity content from a layout resource.  The resource will be
* inflated, adding all top-level views to the activity.
*
* @param layoutResID Resource ID to be inflated.
*
* @see #setContentView(android.view.View)
* @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
*/
public void setContentView(@LayoutRes int layoutResID) {
getWindow().setContentView(layoutResID);
initWindowDecorActionBar();
}


也就是说Activity中UI界面的设置其实是getWindow().setContentView(layoutResID);完成的,而getWindow返回的是一个window对象mWindow,该对象是Activity的成员属性。所以Activity的界面只是由Activity的一个成员属性去设置的,从这里也可以看出Activity的意义是远远大于界面的。

3.通过上面的描述,我们自己给出一个Activity的定义(这有可能并不准确,以后我有更好的定义的时候会在这里修改过来):

activity是一个具有生命周期,通过UI界面与用户进行交互去完成特定功能的活动体。所以叫他活动是什么正确的,UI界面只是Activity的一个工具而不是Activity的全部。

生命周期的理解

生命周期四大状态:

1.当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态;

2.当Activity失去了焦点但仍然可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态;

3.当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态;

4.当Activity由于人为或系统原因(如低内存等)被销毁,此时处于销毁状态;



这是官方给出的生命周期图,当一个Activity被加载后,会调用onCreate函数,这个函数主要是设置一些初始化数据和UI布局(setContentView),紧接着就是调用onStart函数;onStart函数是界面显示给用户的时候调用的,此时还无法与用户进行交互,只能看到这个界面,就是说onStart可能完成了一些与用户交互的准备工作,这些完成后会调用onResume函数,onResume函数执行的时候,已经具备了与用户交互的能力,并且该activity已经在activity栈的顶部了;onResume过后,activity会进入Running/Active的状态;当其他透明的activity或者是未能完全遮住本activity的activity进入了前台,那么activity会进入暂停状态,onPause函数会保存一些activity的属性状态等信息,在此之后可以根据不同的情况调用不同的函数,若被其他activity完全遮住,会调用onStop,但是一旦原来的activity又进入前台则回调onResume;调用onStop后,可以调用onRestart,也可能因内存问题被杀死;之后,onDestroy会在back后或者activity活动完成后调用,此时表示整个activity生命周期的结束。

讲述的有点乱,附上自己画的图可能好点:



注意:

1)只有onPause、onStop被调用后才有可能被杀掉,也就是在activity运行的状态及该状态之前的时期,该activity不会被突然杀死,就算要被杀死也必须经历onPause、onStop

2)onPause、onStop调用时要考虑到内存不够时,会强行杀死activity

3)onCreate只会在该activity第一次时才会被调用,否则只会调用onStart、onResume

一些验证

有两个activity,第一个activity可以跳转到第二个activity,执行如下操作时调用的顺序:

1)启动demo,进入MainActivity后再点击调转进入第二个activity,之后连续两次点击back键:

这个过程中,activity的函数调用顺序如下图:



由上图可知:当跳转到第二个activity界面上时,是先调用MainActivity的onPause用于完成某些数据的存储,再去建立第二个activity当完全建立好后,也是整个SecondActivity覆盖住MainActivity的时候,此时调用MainActivity的onStop;当back后也是一样的道理只不过最后一步是onDestroy因为back键将SecondActivity弹出了Activity栈;最后的back操作也是很容易理解的。

2)启动demo,直接按home键,之后再进入demo:



启动的调用比较简单就是三步走,当home之后则保存当前activity的有关数据(其实也可以看出home的时候其他的界面是慢慢的遮住当前activity的,所以会有一个未完全遮住的过程,因此要先调用onPause),但完全进入桌面的时候,会调用onStop;再次点击demo时,由于上一个状态函数是onStop,由生命周期图知许先调用onRestart再调用onStart、onResume。

3)在2)的基础上按电源键,再解锁:



电源键的调用顺序与home完全相同,不在赘述。

以上仅是一个初学者的片面了解,若有不对之处,欢迎大家随时交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  activity 生命周期