Activity
四个状态
应用程序中,每个 Activity
的活动状态会随着运行状态而发生变化,都有可能从活动状态转变为非活动状态,从非活动状态转变成活动状态。总结起来,一个 Activity
会有四种状态:
-
活动状态
Activity
位于前台,用户可见,可以获得焦点。处于活动状态的Activity
在系统中的优先级最高,最不容易被系统回收。 -
暂停状态
该Activity
不再处于前台了,但是仍然对用户可见,不能获得焦点。处于暂停状态的Activity
在系统中也有着较高的优先级,不容易被系统回收,只有在内存极度缺乏的时候系统才会回收它。 -
停止状态
该Activity
不可见了,无法获得焦点。处于停止状态的Activity
,系统会保存其成员变量和状态,但在内存缺乏时,该Activity
会被系统回收。 -
销毁状态
该Activity
结束,或者该Activity
所在的进程被结束,系统优先回收此状态的Activity
。
Activity
生命周期和回调方法
在Activity
生命周期中如下方法会被调用到:
-
onCreate()
Activity
创建时被回调的函数,在这个函数中应该完成初始化操作,比如布局加载。 -
onStart()
Activity
启动时被调用,此时Activity
转变成用户可见状态。 -
onRestart()
Activity
重新启动时被调用,由停止状态转变为运行状态前调用。 -
onResume()
Activity
恢复,Activity
处于运行状态,准备好了与用户交互。 -
onPause()
Activity
被暂停时调用,此函数在系统启动/恢复另一个Activity
时调用。 -
onStop()
Activity
停止,Activity
处于完全不可见状态。 -
onDestroy()
Activity
销毁前被调用。
代码实例
我们在项目 ActivitySample
中创建一个Activity
名为 LifeActivity
并配置.
Java 代码
public class LifeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life);
Log.i("LifeActivity", "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i("LifeActivity", "onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("LifeActivity", "onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.i("LifeActivity", "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i("LifeActivity", "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i("LifeActivity", "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("LifeActivity", "onDestroy");
}
}
Kotlin 代码
class LifeActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_life)
Log.i("LifeActivity", "onCreate")
}
override fun onStart() {
super.onStart()
Log.i("LifeActivity", "onStart")
}
override fun onRestart() {
super.onRestart()
Log.i("LifeActivity", "onRestart")
}
override fun onResume() {
super.onResume()
Log.i("LifeActivity", "onResume")
}
override fun onPause() {
super.onPause()
Log.i("LifeActivity", "onPause")
}
override fun onStop() {
super.onStop()
Log.i("LifeActivity", "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.i("LifeActivity", "onDestroy")
}
}
这里时针对 LifeActivity
的生命周期的回调方法通过打印日志来记录。
启动 LifeActivity
编辑布局文件 activity_my1.xml
,增加一个id
为lifeBtn
的按钮;
编辑 MyActivity1
代码,为新增的按钮设置点击事件,点击id
为lifeBtn
的按钮启动LifeActivity
。
Java 代码 MyActivity1
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my1);
......
Button life = findViewById(R.id.lifeBtn);
life.setOnClickListener(view -> {
Intent intent = new Intent(this, LifeActivity.class);
startActivity(intent);
});
}
Kotlin 代码 MyActivity1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my1)
......
val life: Button = findViewById(R.id.lifeBtn)
life.setOnClickListener{
val intent = Intent(this, LifeActivity::class.java)
startActivity(intent)
}
}
MyActivity1
的界面效果:
运行程序,点击新添加的按钮,页面跳转至 LifeActivity
;
点击系统返回键;然后查看日志:
项目代码地址
Java:
https://github.com/BethelDEV/shaguaAndroid/tree/main/javaSource/ActivitySampleKotlin:
https://github.com/BethelDEV/shaguaAndroid/tree/main/kotlinSource/ActivitySample