在Android应用开发中,Activity是核心组件之一,它充当了用户界面与应用程序逻辑之间的桥梁。Activity类位于`android.app`包中,从`java.lang.Object`派生,并依次继承了`android.content.Context`、`android.app.ApplicationContext`,最终成为具有用户交互功能的顶级窗口。 1. **Activity的创建方式**: - 默认方式:通过在AndroidManifest.xml文件中声明Activity,系统会根据配置的`<activity>`标签实例化Activity。 - 动态创建:虽然不常见,但可以通过`Context.createActivity()`方法动态创建Activity,但这需要对Android框架有深入理解。 2. **Activity的生命周期**: - `onCreate(Bundle)`:这是Activity的初始化阶段,通常在这里加载布局并执行必要的初始化操作。 - `onStart()`:Activity变得可见,但可能被其他Activity遮挡。 - `onResume()`:Activity变为与用户交互的状态,此时用户可以与屏幕进行交互。 - `onPause()`:当Activity即将失去焦点但仍然可见(例如,弹出一个透明或半透明对话框)时调用,适合保存临时数据。 - `onStop()`:Activity完全不可见,一般不再需要占用资源。 - `onDestroy()`:Activity即将被销毁,可能是系统内存不足或者用户手动关闭。 3. **Activity间的数据传递**: - **通过Intent传递数据**:Intent是Android中用于启动Activity或Service的一种机制,同时也可用于传递数据。使用`Intent.putExtra()`方法添加数据到Intent,然后在目标Activity中通过`Intent.getXXXExtra()`方法获取数据。数据可以是基本类型、Parcelable对象或者Serializable对象。 - **通过静态变量传递**:虽然这种方法简单,但不推荐,因为静态变量在整个应用生命周期中存在,可能导致内存泄漏和其他问题。 4. **启动Activity**: - 使用`Context.startActivity(Intent)`方法启动新Activity,Intent中包含要启动的目标Activity信息和可能的数据。 5. **Activity栈管理**: Android使用任务(Task)和回退栈(Back Stack)管理Activity。新启动的Activity会被压入栈顶,而`finish()`方法会将当前Activity从栈中移除,导致前一个Activity恢复显示。 6. **Activity的四种启动模式**: - `standard`(默认模式):每次启动都会创建一个新的Activity实例。 - `singleTop`:如果目标Activity已经在栈顶,不会创建新的实例,而是调用其`onNewIntent(Intent)`方法。 - `singleTask`:如果栈中已有该Activity的实例,那么会回到该Activity,并清空其上面的所有Activity。 - `singleInstance`:在新的任务栈中启动Activity,它是唯一一个在这个任务中的Activity。 7. **Intent Flag**: 意图标志如`FLAG_ACTIVITY_NEW_TASK`和`FLAG_ACTIVITY_CLEAR_TOP`可以影响Activity的启动行为,比如创建新任务或者清理栈内Activity。 8. **Activity的可见性和状态管理**: - `onSaveInstanceState(Bundle)`:当Activity即将被销毁但数据需要保留时,系统会调用此方法。 - `onRestoreInstanceState(Bundle)`:当Activity恢复时,系统会调用此方法,以便恢复之前保存的状态。 了解和熟练掌握上述知识点对于Android开发者来说至关重要,因为Activity是构建用户界面和管理应用流程的基础。正确处理Activity的生命周期和数据传递,能够提高应用的性能和用户体验。
- 粉丝: 4
- 资源: 926
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (179941432)基于MATLAB车牌识别系统【GUI含界面】.zip
- (179941434)基于MATLAB车牌识别系统【含界面GUI】.zip
- (178021462)基于Javaweb+ssm的医院在线挂号系统的设计与实现.zip
- (178047214)基于springboot图书管理系统.zip
- 张郅奇 的Python学习过程
- (23775420)欧姆龙PLC CP1H-E CP1L-E CJ2M CP1E 以太网通讯.zip
- (174590622)计算机课程设计-IP数据包解析
- (175550824)泛海三江全系调试软件PCSet-All2.0.3 1
- (172742832)实验1 - LC并联谐振回路仿真实验报告1
- 网络搭建练习题.pkt