当前位置: 代码迷 >> Android >> android 装置恢复,数据传递
  详细解决方案

android 装置恢复,数据传递

热度:59   发布时间:2016-04-28 05:05:36.0
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显示的内容		}

?

?

  相关解决方案