`

android 设备恢复,数据传递

阅读更多

设备从休眠状态恢复到运行状态时,休眠前的系统也同时转换成后台休眠,再次恢复的时候,经常会出现数据丢失的情况。

解决方法有多种,这里记录一种,采用SharedPreferences来存储休眠前的数据。(一个主的ListActivity,多个Fragment跳转应用)

当系统处于休眠状态时,会调用OnPause,OnStop,onResume有的设备也会直接把打开的软件,直接destroy掉。

所以要在OnPause,OnStop,onResume,OnDestroy四个方法中做处理。

用onStop方法来说明SharePreferences的使用

@Override
	public void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		if (context != null){      //当底层的ListActivity存在的话,做数据存储记录
			SharedPreferences sp = context.getSharedPreferences("reserverMainBill", 
Context.MODE_PRIVATE);   //这里声明SharePreferences对象,其中"reserverMainBill",是自定义的
信息,作为后续使用时,获取该对象的标志
			SharedPreferences.Editor editor = sp.edit();	//存储需要保存的数据
			editor.putString("accnt", boundAccnt);         //类似Map,根据key,获取value
			
			editor.commit();
		}
	}

 

这里存储了,整个数据的主核心内容accnt,当设备恢复时,就可以根据SharePreferences来获取accnt值,从而再次显示出来,休眠前的数据。

一般是在主ListActivity的onCreate方法中,做获取数据操作。不过这里还是根据软件需求来自定义获取值的地方。

@Override	public void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
                SharedPreferences sp = context.getSharedPreferences("reserverMainBill", Context.MODE_PRIVATE);
		if(sp != null && !sp.getString("accnt", "").equals(""))
		{
			
			boundAccnt = sp.getString("accnt", "");
		}
}

 

因为是采用的ListActivity-Fragment模式的框架,所以会经常涉及到Fragment跳转显示。

如果设备有外界设备,常常会自行在系统休眠前结束掉正在运行的设备。

所以,在程序中获取到保存的主数据值后,要在oncreate方法中,再次跳转一下对应的Fragment,才可以正常显示系统休眠设备前,正在打开的Fragment中显示的数据。

sp = this.getSharedPreferences("reserverMainBill", Context.MODE_PRIVATE);
		if(sp != null && !sp.getString("selected", "").equals("") && isExit==false ){
			
			selectedId = sp.getString("selected", "");
			maccnt = sp.getString("accnt", "");
			
			Bundle arguments = new Bundle();
			arguments.putString(ModeDetailFragment.ARG_ITEM_ID, selectedId);
			
			if(selectedId.equals("systemset")){
				Fragment1 fragment = new Fragment1(this);
				fragment.setArguments(arguments);
				getSupportFragmentManager().beginTransaction()
				.replace(R.id.mode_detail_container, fragment).commit();
			}else if (selectedId.equals("systolist")){
				Fragment2 fragment = new Fragment2(this);
				fragment.setArguments(arguments);
				getSupportFragmentManager().beginTransaction()
				.replace(R.id.mode_detail_container, fragment).commit();
				
			}
			
			
		}else{
			//这里显示默认的登录成功后,ListActivity显示的内容
		}

 

 

分享到:
评论

相关推荐

    Android 数据传递(Intent、Bundle、Serializable、Parcelable等)

    在Android应用开发中,数据传递是至关重要的一个环节,它涉及到不同组件间的通信,比如Activity、Service、BroadcastReceiver之间的交互。本篇文章将深入探讨四种主要的数据传递方式:Intent、Bundle、Serializable...

    Android进程间传递对象

    本篇文章将深入探讨如何利用Parcelable和Service在Android进程中传递对象数据。 首先,我们来理解什么是Parcelable。在Android中,Parcelable是比Serializable更高效的数据序列化方式,用于在内存中创建对象的二...

    Androidstudio实现页面跳转和传递参数

    本篇文章将详细介绍如何在Android Studio中进行页面跳转并传递参数,以及如何利用Bundle对象来存储和恢复数据。 首先,页面跳转在Android中主要通过Intent对象来实现。Intent是一种用来表达应用程序之间意图的类,...

    android与WIFI模块的数据传输 数据透传

    在Android应用中,这可能涉及到将配置参数或读取的数据序列化为字符串或字节流,然后通过Socket发送,接收端再进行反序列化恢复原数据。 3. **WIFI模块通讯**:HLK-RM04模块通常通过AT命令集进行配置和控制。开发者...

    Android-org.quietmodem.Quiet允许通过Android设备上的扬声器传递数据

    在Android平台上,`Quiet`库是一个独特的开源项目,它提供了通过Android设备的扬声器和麦克风进行数据传输的能力。这种技术通常被称为音频 modem 或声波通信,可以在没有物理连接或者网络不可用的情况下,实现设备间...

    eclipse 下的android Activity值传递

    总之,Eclipse下的Android Activity值传递主要依赖Intent和其附加的extras,可以通过基本类型、Parcelable对象、Serializable对象或Bundle进行数据传输。理解这些机制对于构建功能丰富的Android应用至关重要。在实际...

    Android 异步联系人备份与恢复Demo

    - 将VCard导入到联系人:Android提供Intent ACTION_INSERT_OR_REPLACE,通过startActivityForResult()启动这个Intent,传递解析后的VCard数据,系统会自动处理导入过程。也可以使用ContentResolver的insert()方法,...

    android数据存储ppt课件及Demo

    在Android开发中,数据存储是不可或缺的一部分,它允许应用程序持久保存数据,以便在用户退出应用后还能恢复状态或在后续使用中访问数据。本资源"android数据存储ppt课件及Demo"提供了一个全面学习Android数据存储的...

    android loader异步装载数据

    在Android开发中,Loader是一种强大的工具,用于在后台线程加载数据并自动处理数据变更,以便在用户界面上保持最新状态。"android loader异步装载数据"这一主题着重讲解了如何利用Loader机制来实现聊天软件的数据...

    Activity review activity之间的数据传递

    总结起来,Activity之间的数据传递是Android开发中的核心部分,理解并熟练运用上述方法能帮助开发者构建健壮且用户体验良好的应用程序。无论是在启动Activity时传递简单数据,还是处理复杂的对象和数据流,都有相应...

    Android-byte数据序列化成对象对象转化成二进制数据

    其中,`Parcelable`接口是Android专门为提高性能而设计的,它比Serializable更快,更适合本地数据交换,如在Activity之间传递数据。但对于网络或蓝牙通信,我们通常需要将对象转化为二进制数据,此时`Parcel`接口就...

    Android系列之Intent传递对象的几种实例方法

    Intent不仅可以用来启动活动(Activity)、服务(Service)或者广播接收器(BroadcastReceiver),还可以传递数据。本篇文章将详细探讨如何通过Intent在Android中传递对象,主要分为两种方式:使用`Serializable`...

    Android开发 猴子摘桃小项目——学习Activity之间的数据回传

    本项目"猴子摘桃"是一个简单的小程序,旨在帮助开发者学习和理解如何在不同的Activity之间进行数据传递,这是Android开发中的一项重要技能。下面将详细阐述在Android中Activity间数据回传的关键知识点。 1. **...

    安卓activity间的数据传递

    首先,Activity间的通信是Android应用设计的重要部分,这涉及到启动一个新Activity、在Intent中携带数据以及使用Bundle来保存和恢复数据。Intent是Android系统中启动组件(如Activity)的载体,而Bundle则可以看作...

    Android Activity间共享数据

    首先,我们来理解Activity间数据传递的几种主要方式: 1. **Intent传参**:这是最常用的方法,通过Intent对象携带数据。可以传递基本类型、Parcelable接口实现类(如自定义对象)、Serializable接口实现类等。以下...

    Android 从Activity中往ViewPager里的fragment传递数据

    以上就是Android从Activity向ViewPager中的Fragment传递数据的完整过程和相关知识点,实践中可以根据项目需求选择合适的方法进行数据传递。在开发过程中,理解并熟练掌握这些技巧对于提升用户体验和代码质量至关重要...

    Android设备投屏功能Demo

    本项目“Android设备投屏功能Demo”着重展示了如何实现这一功能,特别是利用了MediaProjection API进行录屏,MediaCodec进行H264编解码,以及通过Socket进行数据传输的关键技术。 首先,MediaProjection是Android...

    Android学习之数据存储.7z

    序列化适用于跨进程通信,Parcelable则在内存效率和性能方面更优,适合在Activity之间传递数据。 9. **Room Persistence Library** Room是Android架构组件之一,为SQLite提供了一个抽象层,简化了数据库操作。它...

    android之间传递对象的两种方式

    在Android应用开发中,数据的传递是至关重要的,特别是在Activity之间的通信。本资源重点介绍了两种在Android中传递对象的方法:Parcelable接口和Serializable接口。这两种方式都允许你在Intent中传递复杂对象,但...

Global site tag (gtag.js) - Google Analytics