- 浏览: 173898 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
柨灬柨:
:oops: [color=red][list]
[*]
不 ...
Socket通信总结 -
juren007:
你好,我最近遇到一个问题就是NIO下面缓冲区的分包,不知如何解 ...
解决TCP网络传输“粘包”问题 -
s170285:
<script>alert('1');</s ...
使用ViewHolder模式
[Android][Activity] onCreate, onSaveInstanceState和onRestoreInstanceState的调用探讨
- 博客分类:
- Android
(转)http://blog.csdn.net/leewind841209/article/details/6561874
[Android][Activity] onCreate, onSaveInstanceState和onRestoreInstanceState的调用探讨 .
在Activity里的onCreate(Bundle savedInstanceState)函数中,savedInstanceState这个参数是用来存储Activity的信息,包括了每个UI的信息和用户自定义在其中存储的信息。这篇文章就目的就是讨论关于Activity的自身信息的存储。
[Investigation]
Activity下的函数onSaveInstanceState(Bundle outState),是用来做具体内容的存储。如果不复写的话,这个函数的作用就是调用每个View的onSaveInstanceState去存储UI里面的信息,什么文字、颜色、focus的状态等等。如果复写的话,Programmer可以在这里定义一些需要存储的信息,放到Bundle,调用Bundle里面什么putInt之类的函数。
但是这个函数的难点在于它什么时候被调用,这个不是用简单的生命周期来分析定义的,而其中涉及到了一些逻辑判断。
有篇翻译过来的文章值得推荐: http://blog.csdn.net/ddna/archive/2010/01/03/5123482.aspx
这个函数的执行,我总结下来有这样几点需要注意的
1.如果onSaveInstanceState被调用,是在onResume到onPause之间被调用的
2.使用了finish来关闭Activity不会调用onSaveInstanceState,也就是说这个Activity不可能被再现
3.如果使用了startActivity跳转Activity,onSaveInstanceState也不会被调用,因为原来的Activity并没有被销毁,只是保存到了stack中去了。只要这些UI信息不被破坏,那么onSaveInstanceState是不会被调用的
4.如果orientation发生了变化,同时没有规定Activity在orientation变化的时候不重启,那么Activity会调用onDestory销毁当前的Activity,但是同时onSaveInstanceState也会被调用,这样在变化之后,原有的画面信息仍然被保留了下来
5.如果使用中点击了Home键,onSaveInstanceState不会被调用,因为Activity没有被销魂,只是放到了stack中去了,跟startActivity的情况一样。
我知道我说的可能跟很多其他人转帖的内容不一样,我只想说这些都是我从实际使用中和阅读了Google文档进行分析的来的,欢迎指正。
说完了onSaveInstanceState的调用情况,来说一下返回情况,一般在onSaveInstanceState存储的值,可以在两个地方得到:
1.onCreate(Bundle savedInstanceState)
2.onRestoreInstanceState(Bundle savedInstanceState)
onCreate这个函数,我们继承它的时候,经常不会说把super这行代码去掉,因为前面它有很多代码都是包含了如何用savedInstanceState信息来还原界面的。
onRestoreInstanceState这个函数的调用是在onStart到onResume之间执行的。
为什么要有两个来调用?我觉得这跟Activity保存和还原的方式有关。举个例子来说,如果我们调用了startActivity从Activity A跳转到了Activity B,那么Activity A只调用到了onStop,它本身并没有被消除,只是存到了stack中去了。当你在Activity B中点了Back键,回到Activity A中来,这个时候Activity A是从onStart开始调用的。所以很明显,onCreate这里,我们没有经过,不能在这里读到保存的信息,但是有了onRestoreInstanceState,我们又可以做到了。
[Fect]
说说onSaveInstanceState的缺点,我们可以看到,只有在onCreate和onRestoreInstanceState这样非常不灵活,而且只能用Bundle这个也限制了我们的代码编写。所以Android还提供了一个API:onRetainNonConfigurationInstance。这个下次讨论
public class SecondActivity extends Activity{
private static final String TAG = "Michael";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
if (savedInstanceState!=null) {
Log.i(TAG, "data is "+savedInstanceState.getInt("save"));
}
setContentView(R.layout.main);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt("save", 11);
Log.i(TAG, "onSaveInstanceState, data is "+outState.getInt("save"));
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onrestore, data is "+savedInstanceState.getInt("save"));
}
}
[Android][Activity] onCreate, onSaveInstanceState和onRestoreInstanceState的调用探讨 .
在Activity里的onCreate(Bundle savedInstanceState)函数中,savedInstanceState这个参数是用来存储Activity的信息,包括了每个UI的信息和用户自定义在其中存储的信息。这篇文章就目的就是讨论关于Activity的自身信息的存储。
[Investigation]
Activity下的函数onSaveInstanceState(Bundle outState),是用来做具体内容的存储。如果不复写的话,这个函数的作用就是调用每个View的onSaveInstanceState去存储UI里面的信息,什么文字、颜色、focus的状态等等。如果复写的话,Programmer可以在这里定义一些需要存储的信息,放到Bundle,调用Bundle里面什么putInt之类的函数。
但是这个函数的难点在于它什么时候被调用,这个不是用简单的生命周期来分析定义的,而其中涉及到了一些逻辑判断。
有篇翻译过来的文章值得推荐: http://blog.csdn.net/ddna/archive/2010/01/03/5123482.aspx
这个函数的执行,我总结下来有这样几点需要注意的
1.如果onSaveInstanceState被调用,是在onResume到onPause之间被调用的
2.使用了finish来关闭Activity不会调用onSaveInstanceState,也就是说这个Activity不可能被再现
3.如果使用了startActivity跳转Activity,onSaveInstanceState也不会被调用,因为原来的Activity并没有被销毁,只是保存到了stack中去了。只要这些UI信息不被破坏,那么onSaveInstanceState是不会被调用的
4.如果orientation发生了变化,同时没有规定Activity在orientation变化的时候不重启,那么Activity会调用onDestory销毁当前的Activity,但是同时onSaveInstanceState也会被调用,这样在变化之后,原有的画面信息仍然被保留了下来
5.如果使用中点击了Home键,onSaveInstanceState不会被调用,因为Activity没有被销魂,只是放到了stack中去了,跟startActivity的情况一样。
我知道我说的可能跟很多其他人转帖的内容不一样,我只想说这些都是我从实际使用中和阅读了Google文档进行分析的来的,欢迎指正。
说完了onSaveInstanceState的调用情况,来说一下返回情况,一般在onSaveInstanceState存储的值,可以在两个地方得到:
1.onCreate(Bundle savedInstanceState)
2.onRestoreInstanceState(Bundle savedInstanceState)
onCreate这个函数,我们继承它的时候,经常不会说把super这行代码去掉,因为前面它有很多代码都是包含了如何用savedInstanceState信息来还原界面的。
onRestoreInstanceState这个函数的调用是在onStart到onResume之间执行的。
为什么要有两个来调用?我觉得这跟Activity保存和还原的方式有关。举个例子来说,如果我们调用了startActivity从Activity A跳转到了Activity B,那么Activity A只调用到了onStop,它本身并没有被消除,只是存到了stack中去了。当你在Activity B中点了Back键,回到Activity A中来,这个时候Activity A是从onStart开始调用的。所以很明显,onCreate这里,我们没有经过,不能在这里读到保存的信息,但是有了onRestoreInstanceState,我们又可以做到了。
[Fect]
说说onSaveInstanceState的缺点,我们可以看到,只有在onCreate和onRestoreInstanceState这样非常不灵活,而且只能用Bundle这个也限制了我们的代码编写。所以Android还提供了一个API:onRetainNonConfigurationInstance。这个下次讨论
public class SecondActivity extends Activity{
private static final String TAG = "Michael";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
if (savedInstanceState!=null) {
Log.i(TAG, "data is "+savedInstanceState.getInt("save"));
}
setContentView(R.layout.main);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt("save", 11);
Log.i(TAG, "onSaveInstanceState, data is "+outState.getInt("save"));
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onrestore, data is "+savedInstanceState.getInt("save"));
}
}
发表评论
-
android XML转义字符
2011-11-24 19:10 1858在XML中写字符串时,可能需要在字符串后面加空格,A_B(中间 ... -
EditText添加失去焦点事件
2011-11-21 20:29 28962有这样的情况,就是文本框(EditText)会随着某个Butt ... -
Android图片缩放方法
2011-11-21 16:45 841方法1:按固定比例进行 ... -
Activity(Intent)回传数据详解 startActivityForResult()
2011-11-20 12:04 9389startActivityForResult()的用法其实很简 ... -
Intent用法示例
2011-11-12 17:20 1758Intent用法实例 1.无参数Activity跳转 In ... -
andriod优秀开源项目
2011-10-19 16:56 1716FBReaderJ FBReaderJ用于Android平台 ... -
Android 应用程序版本
2011-10-19 16:25 781在应用程序的 升级/维护 策略中, 版本是一个关键的组成部分. ... -
[Android UI界面] 连续点击Button,弹出多个Dialog
2011-10-18 19:13 4561首先,你要定义一个全局的Dialog。然后,在点击时间里面判断 ... -
Android webview总结
2011-10-13 14:59 889总结 1.添加权限:AndroidManifest.xml 中 ... -
Android获取IMEI码
2011-10-11 00:07 1559相比大家都知道,每部手机都有一个属于自己的字符串,这个字符串是 ... -
使用Timer定时改变view控件的状态
2011-10-10 22:52 1199//1.声明timer private Timer mTim ... -
Android xml风格和主题
2011-10-08 19:23 925(转)http://www.cnblogs.c ... -
使用全局变量
2011-10-07 10:20 1155如想在整个应用中使用,在java中一般是使用静态变量,而在an ... -
android定义数组
2011-09-09 09:42 13115在android中创建数组,直接定义xml文件即可以。 (1 ... -
Android工程各文件夹结构的含义及使用
2011-09-08 11:06 12273对Android这些东西一开始 ... -
Android解析XML的方式
2011-09-08 10:46 3473android解析xml文件的方式 ... -
android框架
2011-09-07 17:48 646读了高焕堂的书,觉得不错。选点自以为重要的知识,放在这里 ... -
android常识
2011-09-07 15:45 7481.mnt/sdcard和sdcard的区别 其实mnt/sd ... -
使用ViewHolder模式
2011-08-31 14:30 10472ViewHolder不是Android的开发API,而是一种设 ... -
Android SimpleAdapter
2011-08-30 12:28 2255对别人的代码改了一下,主要针对SimpleAdapter做一个 ...
相关推荐
"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...
Android Studio SQLite不调用oncreate方法
次就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState), 以及Activity之间的跳转和数据传输(intent)。 Activity中常用的函数有SetContentView() findViewById() finish() startActivity(),其...
Activity 的生命周期 以及 横屏竖屏切换时 Activity 的状态变化 例如: 切换到横屏 onSaveInstanceState onPause onStop onDestroy onCreate onStart onRestoreInstanceState onResume
主要是讲android的activity工作原理,比如onCreate,onstart,onRestart,onResume,等这些函数的执行时机,调用逻辑,有详细的流程图;
答:onCreate()Activity第一次加载时调用,用户构建窗体 onStart()Activity能被用户看到时时调用 onResume()Activity能够得到用户焦点时调用 onRestart()Activity第二次被加载时调用,不在调用onCreate() ...
覆盖onSaveInstanceState方法,并在onCreate中检测savedInstanceState和获取保存的值 @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(currentposition, videoView....
2、在你要退出的activity Oncreate方法中加入ExitApplication.getInstance().addActivity(this);作用是添加到你的activity历史中。 3、在你当前要完全退出程序的activity中覆盖onKeyDown方法. 4、当你点击手机的返回...
android下activity生命周期 生命周期: 回调 描述 onCreate() 这是第一个回调,在活动第一次创建是调用 onStart() 这个回调在活动为用户可见时被调用 onResume() 这个回调在应用程序与用户开始可交互的时候调用 ...
如果 activity 的销毁如果无法避免 那么在activity销毁之前调用 onSaveInstanceState 保存图片的路径 当activity重新创建的时候 会将 onSaveInstanceState 保存的文件传递给onCreate()当中 在onCreate当中 检查照片...
运行时变更就是设备在运行时发生变化(例如屏幕... 然后在 onCreate() 或 onRestoreInstanceState() 期间恢复 Activity 状态。 对于大量数据:用 Fragment 保留需要回复的对象。 自行处理配置变更,不重启Activity。
本文主要介绍Android onCreate( )方法,做Android应用的朋友对onCreate()的方法并不陌生,在开发应用的时候大家应该注意什么呢,这里给大家详细说明
在Android中,有时需要对控件进行测量,得到的控件宽度和高度可以用来做一些计算。在需要自适应屏幕的情况下,这种计算就显得特别重要
Android初步学习笔记 activity生命周期 docs/index.html 1、onCreate:第一次被启动、 2、onStart:activity可视时调用、 3、onResume:activity获得用户焦点是被调用、 4、onPause:启动另外一个activity时被调用、...
下面通过实例来模拟一下Android中Activity的方法回调思想。 Activity接口 代码如下: package com.xujing.test //定义接口 public interface Activity{ //创建时调用的方法 public void onCreate(); ...
主要介绍了Android中oncreate中获得控件高度或宽度的实现方法的相关资料,希望通过本文大家能实现这样的功能,需要的朋友可以参考下
主要介绍了Android编程实现两个Activity相互切换而不使用onCreate()的方法,结合实例形式分析了多个Activity切换而不重新创建的操作技巧,需要的朋友可以参考下
最近在准备面试,碰到这一题...在A跳转B会执行:A onPause -> A onStop -> B onCreate -> B onStart -> B onResume 在B按下返回键会执行:B onPause -> B onStop -> B onDestroy -> A onRestart -> A onStart -> A on
在不需要右滑返回的activity的onCreate()里调用 setSwipeBackEnable(false); //主 activity 可以调用该方法,禁止滑动删除 点击返回键也具有该动画效果: @Override public void onBackPressed() { ...
背景: android活动的生命周期包括以下回调: onCreate() , onStart() , onResume() , onPause() , onStop() , onRestart()和onDestroy() 。 这些回调为开发人员提供了指示应用程序行为的区域。onCreate() 此...