一、Activity概述
Android应用程序是由许多Activity组成的。一个Activity代表一个屏幕上的窗口。用户与应用程序交互时,Activity会接收用户的输入并处理屏幕输出。Activity的启动流程是Android应用程序中至关重要的一个环节。
二、Activity的生命周期
一个Activity的生命周期可以分为四个阶段:
1. 创建阶段
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
}
在创建阶段中,首先调用了onCreate()
方法。在这个方法中,我们可以初始化Activity,比如设置布局文件、获取控件等。
2. 运行阶段
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
protected void onStart() {
super.onStart();
// Activity 准备开始
}
@Override
protected void onResume() {
super.onResume();
// Activity 进入前台
}
}
在运行阶段中,Activity已经准备好了。在Activity变成前台窗口之前,onStart()
方法会被调用,在Activity变成前台窗口之后,onResume()
方法会被调用。
3. 暂停阶段
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
protected void onStart() {
super.onStart();
// Activity 准备开始
}
@Override
protected void onResume() {
super.onResume();
// Activity 进入前台
}
@Override
protected void onPause() {
super.onPause();
// Activity 进入后台
}
}
在暂停阶段中,onPause()
方法会被调用。在这个方法中,我们可以保存一些需要持久化的数据,比如用户输入的内容。
4. 停止阶段
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
protected void onStart() {
super.onStart();
// Activity 准备开始
}
@Override
protected void onResume() {
super.onResume();
// Activity 进入前台
}
@Override
protected void onPause() {
super.onPause();
// Activity 进入后台
}
@Override
protected void onStop() {
super.onStop();
// Activity 被停止
}
}
在停止阶段中,onStop()
方法会被调用。在这个方法中,我们可以释放一些资源。
三、Activity之间的跳转
在Android应用程序中,Activity之间的跳转是非常普遍的。Activity之间的启动方式有两种:
1. 显式启动
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);
上述代码中,我们使用了一个Intent对象,将要启动的Activity的类名传递给了Intent对象。然后调用startActivity()
方法来启动Activity。
2. 隐式启动
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
这里我们使用了一个Intent对象,并将其设置为ACTION_VIEW
类型,同时将一个Uri对象传递给了Intent对象。系统会根据Uri的Scheme、Type、Category等属性,匹配到适合的Activity来启动。
四、Activity启动流程
在一个Activity启动另一个Activity时,系统必须执行以下操作:
1. 创建要启动的Activity对象
系统会根据Intent指定的类名,使用Java反射机制创建一个Activity对象。
2. 构建要启动的Activity的环境
系统会调用ActivityThread
的handleLaunchActivity()
方法,来构建要启动的Activity的环境。
final ActivityClientRecord r = new ActivityClientRecord();
r.token = appToken;
r.ident = ident;
r.intent = intent;
r.isProfiling = (flags&Profiler.FLAG_PROFILING)!=0;
...
Activity a = performLaunchActivity(r, customIntent);
3. 调用onCreate()方法
系统会调用Activity的onCreate()
方法,来进行一些初始化工作。
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
}
4. 加载布局文件
系统会解析布局文件,并将解析后的视图加入到Activity的View树中。
setContentView(R.layout.activity_my);
5. 构建OptionsMenu
如果Activity需要显示OptionsMenu,系统会调用Activity的onCreateOptionsMenu()
方法,来构建要显示的Menu。
public class MyActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_my_menu, menu);
return true;
}
}
6. 生命期回调方法
系统会依次调用Activity的各个生命期回调方法,包括onStart()
、onResume()
、onPause()
、onStop()
、onDestroy()
等。
五、总结
Android应用程序中Activity是核心组件之一,它的启动流程至关重要。本文对Activity的生命周期、Activity之间的跳转以及Activity的启动流程进行了详细阐述。