Android应用程序是由Android系统活动(Activity)的堆栈所管理的。生命周期方法是在不同的时间点被调用的一些方法。当Android系统启动一个应用程序或者用户操作一个应用程序时,都会在Activity执行一些操作来响应这个事件。
一、生命周期方法有哪些
生命周期方法在开发中非常重要,了解其调用顺序可以更好地管理Activity,在此先介绍几个基本的生命周期方法
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onStart() { super.onStart(); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } }
二、生命周期方法的详解
1. onCreate()
创建Activity时首先被调用这个方法,一般用于初始化操作,加载布局等。必须在Activity的整个生命周期中只调用一次。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 initView(); initData(); initListener(); }
2. onStart()
当Activity在屏幕上可见时,此方法将被调用。这个方法被调用后,Activity变成VISIBLE状态,并处于前台,但此时并不是用户和Activity进行交互的时间点。
@Override protected void onStart() { super.onStart(); //逻辑操作 startPlay(); }
3. onResume()
Activity处于resumed状态时,此方法将被调用。这意味着Activity在前台,并与用户进行交互。如果Activity暂停(如来电或横幅通知等情况),则此方法不会被调用。
@Override protected void onResume() { super.onResume(); //逻辑操作 resumePlay(); }
4. onPause()
在Activity失去焦点进入Pause状态时,此方法将被调用。此时,Activity不可见,但依然部分活跃状态,因为用户有可能返回当前Activity。例如,当用户进入另一个Activity或设备进入保持活跃状态的模式(如用户按下电源键)时,将调用此方法。
@Override protected void onPause() { super.onPause(); //逻辑操作 pausePlay(); }
5. onStop()
当Activity被完全遮盖或另一个Activity打开(并完全遮盖)当前Activity时,此方法将被调用。需要注意的一点是,当系统自动销毁Activity时不会调用此方法。
@Override protected void onStop() { super.onStop(); //逻辑操作 stopPlay(); }
6. onDestroy()
当Activity结束并即将销毁时,此方法将被调用,并在当前Activity结束之前执行一些需要完成的资源释放操作,如保存某些数据,释放一些资源等等。
@Override protected void onDestroy() { super.onDestroy(); //逻辑操作 releasePlay(); }
三、生命周期实例
以一个简单的计数器应用程序为例,演示Activity在不同生命周期方法中的行为
1. MainActivity.java
public class MainActivity extends AppCompatActivity { private int count = 0; private TextView mCountTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取TextView组件 mCountTv = findViewById(R.id.count_tv); mCountTv.setText(String.valueOf(count)); Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show(); } @Override protected void onStart() { super.onStart(); Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show(); } @Override protected void onResume() { super.onResume(); Toast.makeText(this, "onResume", Toast.LENGTH_SHORT).show(); } @Override protected void onPause() { super.onPause(); Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show(); } @Override protected void onStop() { super.onStop(); Toast.makeText(this, "onStop", Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show(); } //增加计数 public void onCountBtnClick(View view) { count++; mCountTv.setText(String.valueOf(count)); } //重置计数 public void onResetBtnClick(View view) { count = 0; mCountTv.setText(String.valueOf(count)); } }
2. activity_main.xml
四、总结
通过本文的介绍和实例,我们掌握了生命周期的基本概念、生命周期方法的调用时机及生命周期的实现等相关知识。合理地管理Activity的生命周期可以让我们的应用程序更加高效、稳定,更好地满足用户的需求。