今天接到一个电面,途中面试官问到一个问题,如果一个activity在后台的时候,因为内存不足可能被杀死,在这之前如果想保存其中的状态数据,比如说客户填的一些信息之类的,该在哪个方法中进行。

onSaveInstanceState虽然不是生命周期的方法,但只要activity在非主动的情况下杀死,就肯定会被调用。

onSaveInstanceState方法被调用的需要注意的几个地方:

1、onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用

2、在测试的时候发现,进行屏幕切换的时候activity被销毁了,onSaveInstanceState()方法一定被调用了

3、在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。

4、我在测试的时候,使用 kill 杀死进程的方式杀死进程onSaveInstanceState() 方法没有被调用

我们来看下面的代码

package im.weiyuan.com.viewutils;

import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null){
Toast.makeText(MainActivity.this,savedInstanceState.getString("data"),Toast.LENGTH_LONG).show();
}
} @Override
protected void onStop() {
super.onStop();
Log.d("123456","onStop is called");
} @Override
protected void onPause() {
super.onPause();
Log.d("123456","onPause is called");
} @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d("123456","onSaveInstanceState is called");
outState.putString("data","1020223");
} }

最新文章

  1. JS Date当前时间:获取日期时间方法在各浏览器中的差异
  2. IO流-ZIP文档
  3. stl(set+stack) LA 3634 The SetStack Computer
  4. centos7下cups + samba共打印服务的教程
  5. IIS 7.5 配置Asp+Access的几点注意的地方
  6. Android重力感应开发
  7. 0X0000124
  8. js实现双击后网页自己主动跑-------Day55
  9. JavaScript遍历table
  10. php密码对称encrypt加密
  11. Python字节数组【bytes/bytearray】
  12. 2019年春季学期第二周作业 基础作业 请在第一周作业的基础上,继续完成:找出给定的文件中数组的最大值及其对应的最小下标(下标从0开始)。并将最大值和对应的最小下标数值写入文件。 输入: 请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。 输出 在不删除原有文件内容的情况下,将最大值和对应的最小下标数值写入文件
  13. MariaDB主从复制,redis发布订阅,持久化,以及主从同步
  14. Microsoft .NET Framework 3.5 离线安装方法 (仅适用于Win8以上的系统)
  15. 更改了react-redux 官方网站的todolist结构
  16. Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc
  17. 转载:TCP/IP四层模型
  18. JavaScript概念之screen/client/offset/scroll/inner/avail的width/left 分类: JavaScript HTML+CSS 2015-05-27 16:42 635人阅读 评论(0) 收藏
  19. 什么是Asp.net Core?和 .net core有什么区别?
  20. 牛津大学xDeepMind自然语言处理

热门文章

  1. Java找零钱算法
  2. harbor越权漏洞(CVE-2019-16097)
  3. 小谢第10问:前端JS下载文件、表格
  4. Rocket - tilelink - first
  5. link和@import引入css的区别
  6. Java实现 蓝桥杯VIP 算法训练 调和数列
  7. Java实现 LeetCode 206 反转链表
  8. java实现字符串比较
  9. Java实现Labeling Balls(拓扑排序的应用)
  10. Linux 系统资源查看