Android四大组件之Activity深入解读生命周期
在Android开发中,Activity是最基本的组件之一。它提供了屏幕展示、用户交互等功能。掌握Activity的生命周期是非常重要的,这里将对Activity的生命周期进行详细解读。
Activity的生命周期
Activity的生命周期包含7种状态,分别为:
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
下面将对每个状态进行解释。
1. onCreate()
Activity第一次创建时调用,主要完成Activity的初始化。通常在该方法中完成布局文件的加载、变量的初始化等操作。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化变量
mCount = 0;
// ...
}
2. onStart()
Activity即将开始可见时调用。在该方法中通常完成对数据的加载、注册监听器等操作。
@Override
protected void onStart() {
super.onStart();
// 加载数据
loadData();
// 注册监听器
registerListeners();
// ...
}
3. onResume()
Activity处于前台,可见时调用。在该方法中通常完成一些需要启动的操作,例如定位、相机等。
@Override
protected void onResume() {
super.onResume();
// 启动定位
startLocation();
// 启动相机
startCamera();
// ...
}
4. onPause()
Activity失去焦点、不再前台,但仍可见时调用。在该方法中通常完成一些需要暂停的操作。
@Override
protected void onPause() {
super.onPause();
// 暂停定位
pauseLocation();
// 暂停相机
pauseCamera();
// ...
}
5. onStop()
Activity不再可见时调用。在该方法中通常完成一些数据存储、注销监听器等操作。
@Override
protected void onStop() {
super.onStop();
// 存储数据
saveData();
// 注销监听器
unregisterListeners();
// ...
}
6. onRestart()
Activity重新启动时调用。在该方法中通常完成一些重新开始计时、更新数据等操作。
@Override
protected void onRestart() {
super.onRestart();
// 重新计时
mCount = 0;
// 更新数据
updateData();
// ...
}
7. onDestroy()
Activity被销毁时调用,在该方法中进行一些资源的释放、对象的销毁等操作。
@Override
protected void onDestroy() {
super.onDestroy();
// 释放资源
releaseResource();
// 销毁对象
destroyObject();
// ...
}
Activity的生命周期示例
下面通过两个示例来演示Activity的生命周期。
示例一
在Activity1中从按钮1中启动Activity2,然后按返回键返回到Activity1:
public class MainActivity extends AppCompatActivity {
Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 启动Activity2
Intent intent = new Intent(MainActivity.this, Activity2.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.d("MainActivity", "onStart() called");
}
@Override
protected void onResume() {
super.onResume();
Log.d("MainActivity", "onResume() called");
}
@Override
protected void onPause() {
super.onPause();
Log.d("MainActivity", "onPause() called");
}
@Override
protected void onStop() {
super.onStop();
Log.d("MainActivity", "onStop() called");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("MainActivity", "onDestroy() called");
}
}
public class Activity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
}
@Override
protected void onStart() {
super.onStart();
Log.d("Activity2", "onStart() called");
}
@Override
protected void onResume() {
super.onResume();
Log.d("Activity2", "onResume() called");
}
@Override
protected void onPause() {
super.onPause();
Log.d("Activity2", "onPause() called");
}
@Override
protected void onStop() {
super.onStop();
Log.d("Activity2", "onStop() called");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("Activity2", "onDestroy() called");
}
}
运行结果:
D/MainActivity: onStart() called
D/MainActivity: onResume() called
D/Activity2: onStart() called
D/Activity2: onResume() called
D/MainActivity: onPause() called
D/Activity2: onPause() called
D/MainActivity: onStop() called
D/Activity2: onStop() called
D/MainActivity: onDestroy() called
示例二
在Activity中实现一个计数器,当计数器达到10时关闭Activity。
public class MainActivity extends AppCompatActivity {
TextView mTextView;
int mCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
if (savedInstanceState != null) {
mCount = savedInstanceState.getInt("count");
}
mTextView.setText(String.valueOf(mCount));
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCount++;
mTextView.setText(String.valueOf(mCount));
if (mCount >= 10) {
finish();
}
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("count", mCount);
}
@Override
protected void onStart() {
super.onStart();
Log.d("MainActivity", "onStart() called");
}
@Override
protected void onResume() {
super.onResume();
Log.d("MainActivity", "onResume() called");
}
@Override
protected void onPause() {
super.onPause();
Log.d("MainActivity", "onPause() called");
}
@Override
protected void onStop() {
super.onStop();
Log.d("MainActivity", "onStop() called");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("MainActivity", "onDestroy() called");
}
}
运行结果:
D/MainActivity: onStart() called
D/MainActivity: onResume() called
D/MainActivity: onPause() called
D/MainActivity: onStop() called
D/MainActivity: onDestroy() called
总结
Activity作为组件之一,掌握它的生命周期非常重要。要尽可能合理地利用好每个周期阶段完成相应操作,以达到最高的应用程序性能和用户体验。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android四大组件之Activity深入解读生命周期 - Python技术站