Activity是什么?
活动(Activity)是android开发中使用的最多,也是最基础的组件了。每当我们创建一个新的工程,ADT会为我们默认创建一个MainActivity.class的java文件和activity_main的布局文件,并在AnroidManifest.xml(清单文件)中注册好。这就是一个activity中所必备的三元素(java文件,xml布局文件,清单文件中注册activity)。
Activity功能是什么?
Android的诞生之初,是基于web技术的mvc设计模式的。Activity是一种可以包含用户界面的组件,提供一个屏幕,主要用于和用户进行交互。从分类中就能看到java文件就是C层,xml布局文件就是V层,实现了逻辑和视图分离 。那V和C是如何关联起来的呢?在Activity中的onCreate的方法中调用。
setContentView(R.layout.activity_main);
Activity中实际调用的是Window的setContentView方法,作用是将View加载到根view,其内部封装了xml布局的加载器,它将xml布局加成成了一View,使得Activity可以对view进行控制。
Activity的生命周期:
四钟状态:
1、重新启动:这个activity回到屏幕前面获得用户焦点。
2、暂停:另一个activity回到屏幕前面,activity被暂停,另一个activity可能不是完全覆盖屏幕,暂停的activity活着,能可视。但是内存低的时候会被杀死。(如有的电话来电时候应用的界面半隐藏藏在通话界面的后面)。
3、停止:如果activity被另一个activity完全遮盖,但是还活着,在内存中,然而但内存需要的时候就被干掉。
4、销毁:当一个活动从返回栈中移除后就变成了销毁状态。系统会最倾向于回收处于这种状态的活动,从而保证手机的内存充足。
Activity 类中定义了七个回调方法,覆盖了活动生命周期的每一个环节,下面我来一一介绍下这七个方法。
- onCreate()
这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动
第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布
局、绑定事件等。
- onStart()
这个方法在活动由不可见变为可见的时候调用。
- onResume()
这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的
栈顶,并且处于运行状态。
- onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方
法中将一些消耗CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度
一定要快,不然会影响到新的栈顶活动的使用。
- onStop()
这个方法在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,如
果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()
方法并不会执行。
- onDestroy()
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
- onRestart()
这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
以上七个方法中除了onRestart()方法,其他都是两两相对的,从而又可以将活动分为三
种生存期。
1、开始一个App时,第一个Activity启动(记作A):onCreate->onStart->onResume,按下BACK键:onPause->onStop->onDestroy。
2、再启动A:onCreate->onStart->onResume,按下HOME键:onPause->onStop。再显示A:onRestart->onStart->onResume。
3、从A跳转到B:A.onPause->B.onCreate->B.onStart->B.onResume->A.onStop。
4、B.finish返回到A:B.onPause->A.onRestart->A.onStart->A.onResume->B.onStop->B.onDestroy。
5、A.finish或按BACK键:onPause->onStop->onDestroy。
6、A已启动,旋转屏幕竖->横:onPause->onStop->onDestroy,onCreate->onStart->onResume。
7、再旋转屏幕横->竖:onPause->onStop->onDestroy,onCreate->onStart->onResume。
8、A已启动,点击一个按钮,弹出对话框(Dialog),A部分可见,再关闭对话框:不会回调任何函数。
9、清单中改B的theme=”@android:style/theme.Dialog”。A已启动,A跳转到B,A部分可见:A.onPause->B.onCreate->B.onStart->B.onResume。
10、再B.finish返回到A:A.onResume->B.onStop->B.onDestroy。
11、代码中改B的setTheme(android.R.style.Theme_Dialog),A已启动,A跳转到B,B的外观跟9一样,但A完全不可见:回调过程跟3一样。
12、再B.finish返回到A:回调过程跟4一样。