Android
开发过程中Activity
负责Android
系统的界面展示功能,也是与用户交互的核心功能。对于用户来说,Activity
可能就是Android
应用,因此对于Android
开发来说Activity
的了解和使用显得尤其重要。Activity
负责创建一个窗口用于展示给用户看,而对于我们,所需要做的事就是决定展示怎样的狂口以及怎样的交互。Activity
实现只需要通过创建一个继承自Acitvity
的类即可,然而需要其能在整个系统作为一个界面组件使用的话还需要将其向系统注册,即在清单文件注册activity
(四大组件均需注册静态或动态)。清单文件如下:
<manifest>
<application>
......
<activity android:name=".MainActivity>
<intent-filter>
<action android:name="android.intent.action.MAIN >
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
对于Activity
的理解可以通过如下问答方式来了解:
Activity是什么?
Activity
是app
与用户交互的应用界面
Activity如何使用?
创建一个Activity
类,导入一个界面布局文件,并将该activity
注册到application
的清单文件中,通过action或者类名的方式跳转启动activity
.
Activity有哪些周期?
Activity
常见的周期主要分为三对:
- 组件创建和销毁(
onCreate、onDestroy
) - 组件的启动和停止(
onStart、onStop
) - 组件的可见和不可见(
onResume、onPause
) 一般的启动调用顺序为onCreate->onStart->onResume->onPause->onStop->onDestroy
。当Activity中途退出会调用onRestart->onStart->onResume->onPause->onStop->onDestroy
.流程可见下图:

Activity
管理的数据结构是什么?这种结构的特点有哪些?
AMS
管理activity
采用的是栈结构,栈有两个动作:进栈和出栈,栈的特点是先进后出、后进先出。
Activity的启动方式有哪些?
acitivity
的启动方式有四种:
standard
标准模式(默认为标准模式),每次启动一个Activity都是重新创建一个activity
进栈,而不考虑是否已经存在该activity
的对象。singleTop
栈顶模式,当前栈顶为需要跳转的activity
时则不需重新创建新的activity
,直接返回栈顶activity
即可,返回activity
不会再调用onCreate
,而是调用onNewIntent
。singleTask
栈内复用模式,当前栈中存在需要跳转的activity
时,直接将该activity
上面的activity
情况,将该activity
置于栈顶,此时不会再调用onCreate
,而是调用onNewIntent
。当不存在时创建一个activity
进栈。singleInstance
全栈复用模式,这种模式下的activity
在创建时会被单独放在一个栈中(创建一个新栈、创建一个activity
进栈),若activity
存在不需要重新创建,此时不会再调用onCreate
,而是调用onNewIntent
。
Activity的状态有哪些?
Activity
的状态包含:
- 运行中
当前activity位于栈顶,前台可见 - 暂停
当前activity
被另一个透明或者dialog
样式的Activity
覆盖,与窗口管理器保持连接,但已失去焦点,不可与用户交互。 – - 停止
当Activity
不可见时,Activity
处于Stopped
状态。当Activity
处于此状态时,一定要保存当前数据和当前的UI
状态,否则一旦Activity
退出或关闭时,当前的数据和UI
状态就丢失了。 - 杀死
Activity
被杀掉以后或者被启动以前,处于Killed
状态。这是Activity
已从Activity
堆栈中移除,需要重新启动才可以显示和使用。
scheme跳转协议?
Android
中的Scheme
是一种页面内跳转协议,通过自定义Scheme
协议,可以跳转到app
中的任何页面。协议格式:
"schme://localhost:8000/gift?id=80&name=tt"
schme
协议名称localhost
地址域8000
端口号gift
路径id
和name
为参数activity
的使用
<intent-filter>
<data android:host="localhost" android:path="/gift" android:port="8000" android:scheme="schme"/>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
- 调用方式
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(“schme://localhost:8000/gift?id=80&name=tt”)));