前言

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");
    }
}
03-05 23:28