`

[Android][Activity] onRetainNonConfigurationInstance的调用探讨

 
阅读更多

转自:http://blog.csdn.net/leewind841209/article/details/6569324

[Target]

在上面一篇文章里面讲了怎么用onSaveInstanceState,也分析了onSaveInstanceState的局限性和问题,这篇文章就讲讲怎么用onRetainNonConfigurationInstance突破这种局限

 

[Investigation]

上篇文章讲到onSaveInstanceState调用的返回值只出现在onCreate和onRestoreInstanceState两个地方,且必须以Bundle的形式存储信息。在代码上面有很多的局限性。所以Google还提供了一个API:onRetainNonConfigurationInstance.

当Device的Configuration发生改变时,这个改变包括了屏幕的方向的变化、keyboard的弹出等,当发生改变时Activity会调用到onDestroy,这个时候可以通过onRetainNonConfigurationInstance来保存数据。

 

onRetainNonConfigurationInstance的使用

onRetainNonConfigurationInstance的返回值是一个object,所以在这里可以把integer, string这些对象和一些自定义对象,返回出去,不用再受到bundle的局限。

onRetainNonConfigurationInstance的返回值是通过getLastNonConfigurationInstance调用的。可以通过

 

[java] view plaincopy
 
  1. Object obj = getLastNonConfigurationInstance();  

 

 

或者cast来转换对象如下例所示:

 

[java] view plaincopy
 
  1. String str = (String) getLastNonConfigurationInstance();  

 

 

 

好了最后不多说了放一个例子,具体就是读log,在模拟器上检验这个代码的时候,按ctrl+F11切换屏幕方向,就可以看到结果了。

 

[java] view plaincopy
 
  1. package com.leewind.onretainnonconfigurationinstance;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.util.Log;  
  5. public class TestOnRetainNonConfigurationInstance extends Activity {  
  6.     /** Called when the activity is first created. */  
  7.     private static final String TAG = "Michael";  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.         if (getLastNonConfigurationInstance()!=null) {  
  13.             String str = (String) getLastNonConfigurationInstance();  
  14.             Log.i(TAG, str);  
  15.         }  
  16.           
  17.     }  
  18.     @Override  
  19.     public Object onRetainNonConfigurationInstance() {  
  20.         // TODO Auto-generated method stub  
  21.         //return super.onRetainNonConfigurationInstance();  
  22.         return "Michael";  
  23.     }  
  24.       
  25. }  

 

 

你会发现一个很有意思的现象,横屏转竖屏的时候会打两行log,这是说要启动Activity 2次吗?

分享到:
评论

相关推荐

    android activity方法调用图

    android activity方法调用图, 方便查找,对理解流程有用!

    android activity互相调用 操作数据库

    Activity之间的互相调用是Android应用中常见的场景,而操作数据库则涉及到数据持久化存储。以下是关于这两个知识点的详细说明: 1. **Android Activity互相调用**: - **启动模式**:Android中的Activity有四种...

    android 利用intent调用activity 简明精炼的例子

    本篇将重点讲解如何利用Intent在Android中调用Activity,并进行数据的传递与接收。 首先,让我们了解一下Activity。在Android中,Activity是用户界面的载体,它代表了用户可以看到并与其交互的一个屏幕。通过Intent...

    Android代码-cordova调用安卓原生activity插件

    cordova调用安卓原生activity插件 使用简介 JS端使用方式 //sendData表示要从js端发送到原生activity的数据,需用json对象传输 var sendData = { id:10001, name:"Simon", age:28 }; window.cordova.plugins....

    Android Activity生命周期

    Android Activity 生命周期 Android Activity 生命周期是指 Activity 从创建到销毁的整个过程,该过程中会经历多个状态变化,每个状态变化都会触发相应的回调方法。理解 Activity 生命周期是 Android 开发的基础。 ...

    android Activity调用&&aidl;

    在这里,我们将深入探讨如何在Android中调用Activity以及如何使用AIDL。 首先,我们来看Activity的调用。Activity的生命周期包括onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()等方法。当...

    Android Activity 实时模糊效果

    在本篇文章中,我们将深入探讨如何在Android中实现Activity的实时模糊效果,并参考博文《Android Activity 实时模糊效果》。 首先,理解实时模糊效果的实现原理。在Android中,我们可以利用Bitmap的滤镜效果来达到...

    android Activity 详述 demo

    这个"android Activity 详述 demo"旨在深入探讨Activity的工作原理及其在实际应用中的使用方式。通过链接给出的博客文章(http://blog.csdn.net/q610098308/article/details/50057927),我们可以学习到Activity的...

    android activity右进右出动画

    总结来说,实现"android activity右进右出动画"主要涉及创建动画XML资源,然后在Activity的生命周期中合适的位置调用`overridePendingTransition()`方法。通过这种方式,开发者可以为用户创造出更加生动、自然的应用...

    Android Activity内嵌Fragment,当Activity recreate时Fragment被添加多次,造成界面重叠

    因为`onCreate()`在Activity的第一次创建和重建时都会调用,而在Activity重建时,`onActivityCreated()`和`onStart()`只会被调用一次。 此外,如果你使用的是静态Fragment(即在布局文件中定义的Fragment),可能...

    Android Activity学习笔记

    Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...

    android Activity之间数据的回传

    ### Android Activity之间数据的回传 #### 一、引言 在Android开发中,Activity间的交互是非常常见的需求。特别是当我们需要从一个Activity跳转到另一个Activity,并希望在完成某些操作后能够将数据回传给原始...

    android两个Activity的转换

    在Android应用开发中,Activity是构成应用程序的基本组件,它代表用户界面的一个屏幕。"android两个Activity的转换"这个主题涉及到如何在不同的Activity之间导航,这是Android应用交互的基础。以下是关于这个主题的...

    Activity之间的调用

    Activity之间的调用是Android应用中常见的功能,用于实现不同界面间的跳转和数据传递。本主题将深入讲解Activity之间的调用机制以及Intent在其中的作用。 一、Activity的启动模式 Activity的启动模式分为四种:...

    android Activity 设置背景透明

    本篇文章将深入探讨如何在Android中实现Activity的背景透明。 首先,我们从AndroidManifest.xml文件开始。为了使Activity背景透明,我们需要在对应的Activity标签中添加一个特殊的主题(Theme)。Android系统提供了...

    android调用另一个activity

    综上所述,"android调用另一个activity"涉及到的核心概念包括Intent的使用、Activity的启动和生命周期管理,以及数据在Activity间的传递。理解并熟练掌握这些知识点对于Android应用开发至关重要。通过实践和学习,...

    androidAPK外部调用应用activity

    本文将深入探讨如何从一个Android APK外部调用另一个应用的Activity,特别是针对示例代码中的场景——调用特定包名下的Activity。 #### 一、理解Intent与Component Name 在Android中,Intent是应用组件间通信的...

    Android的Activity周期测试

    本篇文章将深入探讨Android的Activity周期,并通过实际测试来帮助开发者更好地掌握这个核心概念。 一、Activity生命周期概述 Activity的生命周期由系统管理,主要分为启动(Creation)、运行(Running)、暂停...

    android activity 动画切换

    在Android应用开发中,Activity是用户界面的基本单元,用于展示应用程序的不同屏幕或“视图”。当我们需要在不同的Activity之间进行切换时,为了提供更丰富的用户体验,可以加入动画效果。这不仅能够使应用看起来...

    Android 中从activity1跳转到activity2再回到activity所经历的生命周期

    ### Android 中从Activity1跳转到Activity2再回到Activity1所经历的生命周期 在Android开发过程中,理解Activity的生命周期对于管理界面状态、处理用户交互以及响应系统事件至关重要。本文将详细解析从一个Activity...

Global site tag (gtag.js) - Google Analytics