activity直接销毁_Android 关于Activity的销毁和重建
Activity的销毁分为两种情况:
第一种是正常的销毁,比如用户按下Back按钮或者是activity自己调用了finish()方法;
另一种是由于activity处于stopped状态,并且它长期未被使用,或者前台的activity需要更多的资源,这些情况下系统就会关闭后台的进程,以恢复一些内存。
需要注意的是这其中有一种情况就是屏幕旋转的问题,当用户旋转手机屏幕,每一次都会导致activity的销毁和重新建立。
对于重建情况,尽管实际的activity实例已经被销毁,但是系统仍然记得它的存在,当用户返回到它的时候,系统会创建出一个新的实例来代替它,这里需要利用旧实例被销毁时候存下来的数据。这些数据被称为“instance state”,是一个存在Bundle对象中的键值对集合。
缺省状态下,系统会把每一个View对象保存起来(比如EditText对象中的文本,ListView中的滚动条位置等),即如果activity实例被销毁和重建,那么不需要你编码,layout状态会在onRestoreInstanceState后恢复到前次状态,可见Activity的onRestoreInstanceState。
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (mWindow != null) {
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}
如果重写了onRestoreInstanceState并且为super Activity的onRestoreInstanceState,界面将不会恢复。
但是如果你的activity需要恢复更多的信息,比如成员变量信息,则需要自己动手写了。
如果要存储额外的数据,必须覆写回调函数onSaveInstanceState(),注意super.onSaveInstanceState()。系统会在用户离开activity的时候调用这个函数,并且传递给它一个Bundle object,如果系统稍后需要重建这个activity实例,它会传递同一个Bundle object到onRestoreInstanceState() 和 onCreate() 方法中去。
1.jpg
当系统停止activity时,系统会调用onSaveInstanceState(),状态信息会以键值对的形式存储下来,程序可以在onSaveInstanceState保存自己想要保存的变量。
static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
要记得调用基类的实现,以实现默认的实现
在onCreate中,可以先检查是否Bundle是null,如果是null,则表明是要创建一个全新的对象,而不是重建一个上次被销毁的对象。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
也可以选择在onRestoreInstanceState()中实现,这个函数在onStart()之后调用。只有在有数据要恢复的时候系统会调用onRestoreInstanceState()
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}
此处也要注意,不要忘记调用基类实现。
引用
activity直接销毁_Android 关于Activity的销毁和重建相关推荐
- activity直接销毁_Android -- Activity的销毁和重建
两种销毁 第一种是正常的销毁,比如用户按下Back按钮或者是activity自己调用了finish()方法: 另一种是由于activity处于stopped状态,并且它长期未被使用,或者前台的acti ...
- Android:销毁所有的Activity退出应用程序几种方式
Android:销毁所有的Activity退出应用程序几种方式 author:DRC工作室 我们都知道,Activity是存放在栈中.在默认的情况下(standard)Activity在栈中是以先进后 ...
- java类安卓app 简介_android.app.Activity 的介绍
文章可随意转载,但务必注明源地址 发现当前Android的资料不是很多,而且对于Activity的介绍也很少,所以把官方文档的android.app.Activity的介绍翻译了一下,加入了一些自己的 ...
- android activity跳转多次闪退_Android实现Activity和Fragment的跳转动画
1.使用overridePendingTransition方法实现Activity跳转动画 botton_in <?xml version="1.0" encoding=&q ...
- activity 启动模式_Android世界:Activity的启动模式及其适用范围
一.Activity启动模式简介 activity启动模式,可以理解为activity在任务栈(也叫"回退栈")的回退规则,即点击"back"键时,activi ...
- activity 防止多次打开_Android开发Activity任务和返回栈
任务是用户在执行某项工作时与之互动的一系列 Activity 的集合.这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中.例如,电子邮件应用可能有一个 Activity ...
- android activity生命周期_Android岗高频面试题合一集,看你能答出几题?
前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...
- android 之Activity的五种传值方式 (在从当前Activity跳转到目标Activity时的传值方式)
A.使用intent(意图)传值 MainActivity(源文件): 1.intent.putExtra(key,value):key一般是String,值为 java八大基本数据类 ...
- android activity横竖屏切换,Activity重新创建问题解决!
activityA和B A跳转到B 1:在主配置文件中添加Bactivity,如果不想B在横竖屏切换的时候导致activity的销毁和重新创建;可在声明activity中添加 android:conf ...
- 透明主题activity和dialog对其他activity生命周期的影响
1 activity的生命周期简单说明 首先上官网图片: //activity不同状态有不同的回调: public class ExampleActivity extends Activity {@O ...
最新文章
- Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)
- 人民搜索,该怎么说你才好
- python第三方开发软件_python开发者的必备工具(一)
- flume学习(四):Flume Interceptors的使用
- 李开复从不缺席的AI夏令营开营:今年周志华俞勇张潼授课,1万人报名仅600入选...
- 简单dp ---HDU3485 Count 101
- createform用法_vue自定义表单生成器form-create使用详解
- debian关闭开机自动启动时候的gui
- Pyspark 最近使用的一些有趣姿势的梳理
- Pycharm远程链接矩池云报错踩坑记录
- 如何重启apache2服务
- UVALive 4725 Airport(二分)
- 物联网空开价格_北斗星C2物联网蒸箱集成灶618价格提前开抢,转发送豪礼
- 昆仑通态复制的程序可以用吗_MCGS昆仑通态触摸屏常见问题(5)
- 阿里巴巴矢量图标如何修改颜色,以及原理
- msys2+mingw64+ragel安装
- 2020 字节跳动,网易,华为(1),阿里P7级别面试经验总结
- 【Android】canScrollVertically和canScrollHorizontally
- php界面入门,web前端入门:一小时学会写页面 - 空酷狗
- XCTF-mobile app3
热门文章
- 数据分析与机器学习之线性回归与逻辑回归(六)
- 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
- 9-4-插值查找-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- View组件之各xml属性
- Exponentially Weighted Moving-Average
- 添加鼠标悬浮在控件上的提示信息 很齐全各种方法 MFC ToolTipCtl
- java 通过 socket 实现 服务器和客户端的通信 TCP
- 未来软件开发的主流方向:规则引擎 (Rule Engine)
- 10 signs that you’re not cut out to be an IT manager
- 第九章:第九章:XML文档集成---Axd向导