0%

引入

一个APP不可能只有一个页面吧,这时候就需要 Navigation 和 Fragment 来帮助我们切换页面。效果图如下。

Fragment 生命周期如下图所示。

阅读全文 »

引入

作为一个完整的应用程序,不可能每一次手机重启了,整个应用程序就和刚下载时候一样,因此数据的存储与操作是必不可少的。Android 系统为我们提供了4种数据存储方式,分别是:SharedPreference、SQLite、ContentProvider 和文件。

阅读全文 »

引入

正常情况下,如果一个进程被移到后台,且当前系统内存不足时,会有一定概率会将该进程杀死来释放内存资源,而被系统杀死时,ViewModel也会被删除,UI的数据就会遭到丢失。

如下图所示,一旦切出后台进程被系统杀死数据就会丢失。

不过好在系统杀死进程时,会调用 onSaveInstanceState() 方法,顾名思义就是保存实例状态的,我们重写这个方法来保存我们的数据。

阅读全文 »

Activity状态

Activity 生命周期是指 Activity 从创建销毁的过程,在这一过程中,Activity 一般处于4种状态,即Active/Running、Paused、Stop、Killed。

  1. Active/Running。此时 Activity 一定处于屏幕的最顶端,可以被看到,并且可以与用户进行交互。对于 Activity 栈来说,它处于栈顶
  2. Paused。此时 Activity 在屏幕上仍然可见,但它已经失去了焦点,用户不能与之交互。处于暂停的 Activity 仍然是存活的,它仍然维持着其内部的状态的信息,但是系统可能会在内存不足时杀死该 Activity。
  3. Stop。此时 Activity 在屏幕上不能被用户所见,即该 Activity 被其它 Activity 所遮盖。同 Paused 状态类似,处于停止状态的 Activity 仍然保留着其内部的状态和成员信息,但是会由于手机系统内存被征用而被系统杀死回收。
  4. Killed。Activity 被系统杀死回收或未启动。

生命周期的事件回调函数

函数 描述 可被杀死 下一个
onCreate() 当 Activity 第一次被创建时调用 onStart()
onRestart() 当 Activity 停止后,再次启动前调用 onStart()
onStart() 当 Activity 正要变得为用户所见时被调用
当 Activity 转向前台时继以 onResume()
当 Activity 变为隐藏时继以 onStop()
onResume()
onStop()
onResume() 当 Activity 开始与用户进行交互前被调用
此时 Activity 位于堆栈顶部,用户可见。继以 onPause()
onPause()
onPause() 当系统将要启动另一个 Activity 或者弹出对话框时调用
此方法会将所有持久性数据写入存储中,下一个 Activity 必须待其完成才能继续
当 Activity 重新回到前台时继以 onResume()
当 Activity 变为用户不可见时继以 onStop()
onResume()
onStop()
onStop() 当 Activity 不再为用户可见时调用
这可能发生在它被销毁或者另一个 Activity (可能是现存或新建的)回到运行状态并覆盖它时
如果 Activity 再次回到前台跟用户交互则继以 onRestart()
如果关闭 Activity 则继以 onDestory()
onRestart()
onDestory()
onDestroy() 在 Activity 销毁前调用
这可能发生在 Activity 结束(调用它的 finish() 方法)或者因为系统需要临时空间而销毁该 Activity 实例时
可以用 isFinishing() 来区分这两种情况

注:表格中“可被杀死”一列是指在该方法被调用后,系统是否可以杀死包含此 Activity 的进程。


为了获取 Activity 被杀死前的状态,可以在 Activity 被销毁前使用 onSaveInstanceState() 方法。

它会将一个键值对方式记录的 Activity 动态状态的 Bundle 对象传递给该方法。

而当 Activity 再次启动时,这个 Bundle 会传递给 onCreate() 方法或随着 onStart() 方法调用的 onRestoreInstanceState(),所以它们两个都能恢复之前保存的状态。

方法 描述 是否可终止
onSaveInstanceState() Android 系统因资源不足而终止 Activity 前被调用,用以保存 Activity 的状态信息
供 onCreate() 和 onRestoreInstanceState()方法恢复使用
onRestoreInstanceState() 恢复 onSaveInstanceState() 保存的 Activity 状态信息
在 onStart() 和 onResume() 方法之间使用
阅读全文 »