在Android开发中,Activity是应用程序UI界面的载体。当用户点击应用程序的主图标或从其他应用程序跳转至该应用时,会启动一个Activity。在这篇文章中,我们将详细讨论Android Activity的生命周期及其应用场景。
一、Activity生命周期
Activity生命周期由以下步骤组成:
1. 创建阶段(onCreate())
Activity开始创建时被调用。通常在此阶段完成界面元素的初始化工作,如设置布局(layout)、获取资源(objects)等等。以下是一个示例:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ... 其他初始化代码 ...
}
}
2. 可见阶段(onStart()和onResume())
在创建完成后,Activity被从后台移至前景并可见时,会调用onStart()和onResume()。在这个阶段,可以触发耗时操作或开始执行某些任务。
public class MainActivity extends AppCompatActivity {
@Override
protected void onStart() {
super.onStart();
// 此处可进行一些耗时操作、数据刷新等
}
@Override
protected void onResume() {
super.onResume();
// 此处可开始执行某些任务
}
}
3. 停止阶段(onPause()和onStop())
当Activity失去焦点或被其他Activity遮盖时,会执行onPause()和onStop()方法。在这个阶段一些资源可以被释放或一些操作可以被撤销。
public class MainActivity extends AppCompatActivity {
@Override
protected void onPause() {
super.onPause();
// 此处可释放一些资源、取消一些操作等
}
@Override
protected void onStop() {
super.onStop();
// 此处可进行一些长时间操作的停止或撤销
}
}
4. 销毁阶段(onDestroy())
当Activity被销毁时会执行onDestroy()方法。一旦Activity被销毁,其内存和其他资源都会被回收清理。
public class MainActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
// 在此销毁一些资源
}
}
二、生命周期应用场景
1. 保存数据
Activity的生命周期方法可以用于保存和恢复Activity的状态信息。下面代码演示如何在Activity被暂停或停止时保存数据,在重新启动Activity时恢复数据:
public class MainActivity extends AppCompatActivity {
private String mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null) {
mText = savedInstanceState.getString("text");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("text", mText);
}
@Override
protected void onStop() {
super.onStop();
mText = "Hello World";
}
}
2. 进入全屏模式
Activity的生命周期方法也可以用于隐藏和显示状态栏。下面代码演示如何在进入全屏模式时隐藏状态栏,在退出全屏模式时显示状态栏:
public class MainActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
@Override
protected void onPause() {
super.onPause();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
3. 后台任务
Activity的可见阶段可以用于后台任务的开始和停止。下面代码演示如何在Activity进入可见阶段时开始执行一个后台任务,在Activity进入不可见阶段时停止后台任务:
public class MainActivity extends AppCompatActivity {
private MyTask mTask;
@Override
protected void onResume() {
super.onResume();
mTask = new MyTask();
mTask.execute();
}
@Override
protected void onPause() {
super.onPause();
mTask.cancel(true);
}
private class MyTask extends AsyncTask
{
@Override
protected Void doInBackground(Void... voids) {
// 执行后台任务的代码
return null;
}
}
}
三、结论
本篇文章详细讨论了Android Activity的生命周期及其应用场景。了解生命周期的基本流程并熟悉其应用场景,将有助于您更深入地理解Android开发。