一、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的启动流程进行了详细阐述。