前言
android与angular有很多相似之处。正所谓学会了一门语言,其他语言都是类似的。
Activity 生命周期
我们可以将android中的activity类比于angular中的组件
与组件的生命周期类似,activity中也有很多状态,在这些状态发生变更时会回调函数。Activity类提供六个核心回调:onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()。而我们创造的每一个自己的activity都会继承Activity类,我们可以覆盖这些方法。
onCreate()
onCreate()方法会在activity创建时触发,用于进行初始化设置。我们必须实现此方法,他会进行创建视图工作。他会传递一个Bundle参数,提供之前保存的活动状态。
onStart()
此时Activity已经可见了,但是还没出现在前台,我们还看不到,无法与Activity交互。如果Activity变得可见,系统接下来会调用onResume()方法,如果Activity变得不可见,接下来会调用onStop()方法。
onStop()
此时Activity已经不可见了,但是Activity对象还在内存中,没有被销毁。例如,当新启动的 Activity 覆盖整个屏幕时,可能会发生这种情况。如果活动再次可见,接下来会调用onRestart()方法。
onResume()
Activity在前台时,会调用此方法。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。此类事件包括接到来电、用户导航到另一个Activity,或设备屏幕关闭。
onPause()
此方法表示Activity不再位于前台。这个方法完成之前,不会继续运行下一个活动,如果活动返回到前台,接下来会调用onResume(),如果活动变得不可见,接下来会调用onStop()。
onDestroy()
Activity将要结束(用户关闭Activity),或者配置变更(如旋转屏幕),系统将要销毁活动。
保存Activity状态
比如说旋转屏幕时,将会触发Activity的onDestroy()方法并重新加载Activity,如果我们想要保存Activity的状态,我们需要用到onSaveInstanceState()方法,他会在onDestroy()方法之前被调用。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("seconds", seconds);
savedInstanceState.putBoolean("running", running);
savedInstanceState.putBoolean("wasRunning", wasRunning);
}
Bundle类型类似于容器,里面保存着键值对,我们往参数里面put键值,在onCreate()方法里可通过键获取值。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
seconds = savedInstanceState.getInt("seconds");
running = savedInstanceState.getBoolean("running");
wasRunning = savedInstanceState.getBoolean("wasRunning");
}
}