- 浏览: 599647 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Android中的activity通过onSaveInstanceState()方法保存activity的状态,在onCreate或者onRestoreInstanceState方法恢复状态,如果是通过onRestart方法前端运行的话,只会执行onSaveinstanceState方法。直接看代码:
package com.hebaijun.savestate; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class SaveStateActivity extends Activity { public static final String TAG = "SaveStateActivity"; @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState!=null) { Log.v(TAG, savedInstanceState.getString("data")); } super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.v(TAG, "onCreate"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { Log.v(TAG, savedInstanceState.getString("data")); super.onRestoreInstanceState(savedInstanceState); Log.v(TAG, "onRestoreInstanceState"); } @Override protected void onSaveInstanceState(Bundle outState) { outState.putString("data", "example"); super.onSaveInstanceState(outState); Log.v(TAG, "onSaveInstanceState"); } @Override protected void onPause() { super.onPause(); Log.v(TAG, "onPause"); } @Override protected void onResume() { super.onResume(); Log.v(TAG, "onResume"); } @Override protected void onStart() { super.onStart(); Log.v(TAG, "onStart"); } @Override protected void onRestart() { super.onRestart(); Log.v(TAG, "onRestart"); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" > </EditText> </LinearLayout>
1.运行程序后我们按HOME键,然后我们重新进入程序,Log如图:
A 我们可以看出onSaveInstanceState方法在onPause方法前执行。
B 程序恢复执行的时候调用了onRestart方法,并没有调用 onRestoreInstanceState方法。
2.运行程序后按BACK键,Log如图:
A 程序并没有调用onSaveInstanceState方法,因为按BACK键表明用户已经明确退出,所以不会执行保存状态的操作。就是说 onSaveInstanceState能不能被执行到是不确定的,要保存永久的数据话还是在onPause方法中用其他方式保存。
B 如果在edittext中输入字符的话,重新执行也不会重新出现。
3.运行程序,在EditText中输入字符串,切换横竖屏。Log如图:
运行界面没有截图,但是可以看到,EditText中的字符有保存下来,说明UI是自动保存和恢复的。前提是这个View要赋给id: android:id="@+id/editText1"
onRestoreInstanceState方法在onStart后面onResume前面执行。
可以附加其他你想保存的状态,在onCreate或者onRestoreInstanceState方法中都可以恢复。
onSaveInstanceState方法会在什么时候被执行
1、当用户按下HOME键时。
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
5、屏幕方向切换时,例如从竖屏切换到横屏时。
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则 onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。
至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和 onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行。
发表评论
文章已被作者锁定,不允许评论。
-
android BaseActivity与BaseFragment的封装
2016-05-19 15:06 10381 概述 多模块Activity+多Fragment 是开发 ... -
android ScrollView常用属性
2016-05-09 09:17 729android:scrollbars 设置滚动条显示。none ... -
android RecyclerView使用及详解
2016-05-04 10:35 29231.前言 话说RecyclerView已经面市很久,也在很多 ... -
android DialogFragment 创建对话框(官方推荐)
2016-04-29 14:22 9261、 概述 DialogFragment在android 3. ... -
android Intent Flags及Task相关属性
2016-04-26 09:15 642task是一个具有栈结构的容器,可以放置多个Activity实 ... -
android SQLite具体实例应用详解(SQLiteOpenHelper)
2016-04-18 19:24 838上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们 ... -
android SQLite3常用命令&语法
2016-04-18 19:01 644sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常 ... -
android View绘制相关问题总结
2016-03-28 19:27 7041.View的绘制流程分几步 ... -
android Handler Looper MessageQueue机制的原理
2016-03-22 21:09 789andriod提供了Handler和Looper来满足线程间的 ... -
android Bitmap,BitmapFactory类图像处理
2016-03-16 16:28 2392BitMap代表一张位图,扩展名可以是.bmp或者.dib。 ... -
android 三类菜单(Option) (Context) (SubMenu)学习
2016-03-14 15:23 949在Android系统中,菜单可以分为三类:选项菜单(Optio ... -
android Sqlite数据库对象模型ORMLite框架学习
2016-03-11 15:24 730在Android项目中或多或少的都会使用数据库,为了提高我们的 ... -
android AsyncTask<参数,进度值类型,返回类型>学习
2016-03-10 14:45 1205AsyncTask和Handler对比 1 ... -
android 远程图片获取和本地缓存
2016-03-10 14:32 802概述 对于客户端——服 ... -
android Fragment生命周期和回退栈学习以及Fragment之间通信
2016-03-10 09:31 1554会涉及到Fragment如何产生,什么是Fragment,Fr ... -
android LruCache内存缓存学习(重写sizeOf方法)
2016-03-09 19:25 1089什么是缓存? 缓存技术原理就是把用户访问的所有对象看作一个全 ... -
android ListView中的convertView缓存及使用
2016-03-09 19:12 1737一、复用convertView 首先讲下ListView的原 ... -
android 从资源角度谈Android代码内存优化
2016-03-09 18:54 741开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么 ... -
android startActivityForResult和setResult详情及Demo
2016-03-09 08:56 1072startActivityForResult与startAct ... -
android Toast详解以及自定义Toast例子
2016-01-28 14:15 1554Toast的用法 Toast只是一个View视图,快速的为用 ...
相关推荐
Android onSaveInstanceState和onRestoreInstanceState触发的时机 Android 中的 onSaveInstanceState 和 onRestoreInstanceState 是两个重要的生命周期方法,它们在 Activity 的生命周期中扮演着关键角色。了解这...
No boilerplate code like onSaveInstanceState or onRestoreInstanceState any more. Getting started Just add the @AutoRestore annotation to your fields that need to be saved and restored in Activities, ...
"View" code and "Screen Code" such as onCreate,onCreateView, onViewCreated or onSaveInstanceState, onRestoreInstanceState.onActivityResult etc. It makes hard to see each "View Logic" and "Screen Logic...
简单的订单安卓程序,其中包括OnClickListener,TextWatcher,onSaveInstanceState,onRestoreInstanceState,onConfigurationChanged的用法
此外,活动的生命周期和保存状态的方法(如onSaveInstanceState和onRestoreInstanceState)也是重要知识点。 第9章可能涵盖“服务(Service)与广播接收器(Broadcast Receiver)”。服务是在后台运行,不与用户...
开发者需要处理onSaveInstanceState和onRestoreInstanceState方法,以便恢复游戏进度。 8. **动画**:Android提供了多种动画框架,如Property Animation和Transition API,用于创建平滑的游戏体验。连连看中的棋子...
在Android平台上,开发一个简易本地音乐播放器是一项常见的任务,对于初学者来说...通过分析和学习这个源码,开发者可以深入了解Android音频播放、UI设计以及应用架构等方面的知识,对提升Android开发技能非常有帮助。
此外,为了防止用户意外退出导致游戏丢失,可以利用Android的onSaveInstanceState和onRestoreInstanceState方法保存和恢复临时的游戏状态。 退出功能是通过结束当前Activity或者调用System.exit()方法实现,但后者...
这可以通过保存和恢复实例状态(onSaveInstanceState和onRestoreInstanceState)或者使用ViewModel来实现。 在标签"android源码"的上下文中,这个计算器源码提供了一个实践Android开发基础的实例,包括UI设计、事件...
这需要在Activity的生命周期方法中处理,如onSaveInstanceState和onRestoreInstanceState。 6. **通知和刷新**:当购物车内容发生变化时,比如添加了新的商品,应用应该及时通知用户并更新购物车图标上的数量。这...
6. **状态保存与恢复**:为了防止应用意外关闭导致游戏进度丢失,可以使用Android的onSaveInstanceState和onRestoreInstanceState方法保存和恢复游戏状态。 7. **错误处理与用户反馈**:良好的用户体验还包括适当的...
Android提供了onSaveInstanceState和onRestoreInstanceState方法来实现这一功能。 7. **性能优化**: 对于游戏而言,流畅性至关重要。开发者可能使用Bitmap的高效加载方式,避免内存泄漏,优化布局重绘,以及合理...
可以使用SharedPreferences存储当前倒计时值,或者在onSaveInstanceState和onRestoreInstanceState中处理。 7. **通知或振动提醒**: 当倒计时结束时,可以添加通知提醒用户,或者使用Vibrator类使设备振动,增加...
在Android应用开发中,`onSaveInstanceState()`是一个关键的方法,用于在应用的Activity或Fragment生命周期中保存用户界面的状态。这个方法通常在系统即将销毁一个组件(例如:屏幕旋转、后台进程被清理等)时调用,...
9. **状态保存与恢复**:为了确保应用在屏幕旋转或其他中断后能恢复到之前的状态,开发者需要处理Activity的生命周期方法,如onSaveInstanceState和onRestoreInstanceState。 10. **通知栏控制**:为了方便用户在...
1. onSaveInstanceState和onRestoreInstanceState:当应用因配置改变(如屏幕旋转)而销毁并重建时,使用这些方法保存和恢复状态。 2. Intent:用于在不同Activity之间传递数据,例如从主界面跳转到记事详情界面。 ...
- 探讨如何在配置更改时保存和恢复Activity的状态,以及使用onSaveInstanceState和onRestoreInstanceState方法。 - 分析如何处理后台任务和后台服务,以防止应用被系统杀死。 3. **UI设计与布局** - 讲解不同的...
然后,当活动被重新创建(如屏幕旋转后),Android会调用`onCreate`或`onRestoreInstanceState`,在这里你可以从`savedInstanceState`参数中恢复之前保存的状态: ```java @Override protected void onCreate...
可以使用SharedPreferences来持久化当前拼图的进度,或者实现onSaveInstanceState和onRestoreInstanceState方法来临时保存游戏状态。 6. **错误处理与优化**: 对用户输入进行有效性检查,防止非法操作,例如相邻...