Android四大组件之一:Activity详解
来源:互联网 发布:人力资源公司网站源码 编辑:程序博客网 时间:2024/05/18 00:26
一、什么是activity
Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。Activity是单独的,用于处理用户操作, Activity 本身是没有界面的, 但activity类创建了一个窗口,可以通过setContentView(View)接口把UI放到activity创建的窗口上,用于显示View。既然Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。
二、activity生命周期
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();}
由图可知:
在一个Activity正常启动过程中,这些方法调用的顺序是onCreate -> onStart -> onResume;在Activity结束的时候方法顺序是onPause -> onStop -> onDestroy,此为一个完整的生命周期。那么对于中断处理(比如电话来了),则是onPause -> onStop,恢复时onStart -> onResume;如果当前应用程序的是一个Theme为Translucent(半透明) 或者Dialog 的Activity那么中断就是onPause ,恢复的时候onResume。
下表更详细的介绍了生命周期函数的事项。
方法
描述
完成后可杀掉?
下一个
onCreate()
当activity被创建时调用。这是做一般的静态初始化的地方,比如创建界面,把数据绑定到列表,等等之类。这个方法会被传入一个Bundle对像,它包含了activity的上一次(关闭时)的状态(如果这个状态可以得到)。此方法后面永远跟着onStart()。
否
onStart()
onRestart()
在停止后被调用,但不是停止后马上调用,而是在再次开始前调用,也就是在再次调用onStart()之前立即调用。
否
onStart()
onStart()
当activity变成可见后立即调用它。如果activity成为最上层,则调用onResume(),如果完全被摭盖,就调用onStop()。
否
onResume()或onStop()
onResume()
当activity处于最上层时,立即调用此方法。此时activity获得输入焦点。后面跟着onPause()。
否
onPause()
onPause()
当另一个activity要进入Pause状态时调用此方法。这个方法一般是用来提交那些发生改变的永久化的数据们,停止动画和其它消耗CPU的玩意们。这些工作必须以最快的速度完成,因为在这个方法返回之前,另一个activity就不能进入resume状态。当它又回到最上层时,后面跟着onResume(),当它被完全摭盖时,后面跟着onStop()。
是
onResume()
or
onStop()
onStop()
当activity被完全摭盖时被调用。当activity要销毁时或被其它activity完全摭盖时都会发生。如果这个activity又回到最上层,则后面跟着onRestart(),如果它逝去了,则跟着onDestroy()。
是
onRestart()
or
onDestroy()
onDestroy()
在activity销毁之前被调用。这是activity能收到的最后一个调用。调用的原因可能是别人在这个activity上调用了finish(),也可能是系统为了更多的内存空间而把它所在的进程处死了。在这个方法中,可以调用isFinishing()来判断自己属于哪一种死法。
是
nothing
三、Activity 栈
Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:
Activity 的状态与它在栈中的位置关系
如上所示,除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。
四、创建Activity
在 android 中创建一个 Activity 是很简单的事情,编写一个继承自 android.app.Activity的 Java 类并在AndroidManifest.xml声明即可。下面是一个为了研究 Activity 生命周期的一个 Activity 实例:
Activity 文件:
public class SampleActivity extends Activity { private static final String LOG_TAG = SampleActivity.class.getSimpleName(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.e(LOG_TAG, "onCreate"); } @Override protected void onStart() { Log.e(LOG_TAG, "onStart"); super.onStart(); } @Override protected void onResume() { Log.e(LOG_TAG, "onResume"); super.onResume(); } @Override protected void onPause() { Log.e(LOG_TAG, "onPause"); super.onPause(); } @Override protected void onStop() { Log.e(LOG_TAG, "onStop"); super.onStop(); } @Override protected void onDestroy() { Log.e(LOG_TAG, "onDestroy "); super.onDestroy(); } }
AndroidManifest.xml 中通过 <activity> 节点说明 Activity,将 apk 文件安装后,系统根据这里的说明来查找读取 Activity,本例中的说明如下:
<activity android:name=".SampleActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
一个<activity>元素也能指定多种intent filters--使用<inetent-filter>元素--为了声明其它应用程序可以激活它。
你可以开启另一个activity通过startActivity(),传递一个Intent描述了你希望启动的Activity。Intent指定要么准备的activity你希望启动或描述你希望完成的动作。一个intent可以传输小量数据被启动的activity使用。你可以这么通过创建一个intent显示的定义你希望启动的activity,使用类名。例如,下面显示一个activity怎么启动另一个activity命名为SignInActivity:
- Android四大组件之一:Activity详解
- Android四大组件之一Activity详解
- Android四大组件之一:Activity
- android 四大组件之一Activity
- Android四大组件之一:Activity
- Android四大组件之一:Activity
- Android 四大组件之一------Activity
- Android四大组件之一:Activity
- android 学习教程五---- 四大组件之一Activity 详解
- Android四大组件--Activity详解
- [Android四大组件] Activity 详解
- Android心得2.4--四大组件之一--Activity
- Android四大组件之一-----Activity总结
- android基础四大组件之一Activity
- 2.Android四大组件之一Activity
- 关于Android四大组件之一Activity
- Android四大组件之一Activity及其生命周期
- android的四大组件之一Activity
- iterator源代码
- Android Support Library更新到v22.1之AppCompat新特性
- 黑马程序员——OC—OC中面向的对象特征之继承和派生
- MVC1和MVC2的区别
- java中解析json格式数据
- Android四大组件之一:Activity详解
- maven3常用命令、java项目搭建、web项目搭建详细图解
- Elasticsearch 学习 初步总结
- Spring框架中获得DataSource对象的方法
- 不曾想过的的命令执行技巧
- c++ 字符串转数字 数字转字符串
- docker高级应用之动态扩展容器空间大小
- Python内建函数isinstance无法准确判断bool与int类型
- Linux——信号掩码(signal mask)