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显示的内容
		}

 

 

你可能感兴趣的:(Fragment,ListActivity,设备恢复数据丢失)