我有两项活动。活动A有一个按钮,它启动活动B.当您点击活动B中的后退按钮时,它会重新启动活动A.此外,当后退按钮被点击时,它会转到活动B的onStop方法,此时我更新了共享的首选项。用户。基本上我将播放器数据存储在共享首选项上,但问题是当活动A重新启动时我还加载了相同的共享首选项,但它没有显示我在活动B停止时保存的更新数据。我重新加载应用程序,它显示了最新的数据。因此,似乎在活动B停止时保存它时,没有足够的时间在活动A重新启动时加载它。那么如何判断共享首选项是否已完成写入?基本上我想加载共享首选项一旦我知道共享首选项已更新,这可能吗?
我正在使用提交方法:
@Override
protected void onStop()
{
Long dist = (long)treadmill_.Mod.distance_;
Long newdist = dist + PlayerInfoManager.getInstance().getDistanceTraveled();
PlayerInfoManager.getInstance().setDistanceTraveled(newdist);
float fastestSaved = PlayerInfoManager.getInstance().getFastestSpeedAcheived();
float fastestInSess = treadmill_.Mod.fastestSpeed;
if(fastestSaved<fastestInSess)
PlayerInfoManager.getInstance().setFastestSpeedAcheived(fastestInSess);
Long time = (long)treadmill_.Mod.time_;
Long newTime = time + PlayerInfoManager.getInstance().getTotalTimeRan();
PlayerInfoManager.getInstance().setTotalTimeRan(newTime);
Log.e("OnStop", "at Run, run, run");
super.onStop();
}
在PlayerInfoManager.getinstance()。setDistanceTraveled(newdist):
public void setDistanceTraveled(Long distanceTraveled)
{
DistanceTraveled = distanceTraveled;
Editor edit = SP.edit();
edit.putLong("DistanceTraveled", distanceTraveled);
edit.commit();
}
SP是sharedPreference实例:
private SharedPreferences SP;
重新启动时的活动A:
@Override
protected void onRestart() {
super.onRestart();
LoadStats();
Log.e("onrestart", " ");
}
public void LoadStats()
{
PIM.loadAll();
Dis.setText(Long.toString(PIM.getDistanceTraveled()));
FastestSpeed.setText(Float.toString(PIM.getFastestSpeedAcheived()));
TotalTime.setText(Long.toString(PIM.getTotalTimeRan()));
KeepItUp.setText(Long.toString(PIM.getLongestTimeInKeepItUp()));
}
public void loadAll()
{// load all saved player data from sharedpreferences
DistanceTraveled = SP.getLong("DistanceTraveled", 0L);
FastestSpeedAcheived = SP.getFloat("FastestSpeed", 0.0f);
TotalTimeRan = SP.getLong("TotalTime", 0L);
LongestTimeInKeepItUp = SP.getLong("KeepItUp", 0L);
}
答案 0 :(得分:0)
使用.commit()
方法可确保您的数据已保存。
请参阅android doc以获取sharedPreferences。
答案 1 :(得分:0)
请使用onPause,因为这发生在onStop
来自文档
系统即将开始恢复上一个活动时调用。这通常用于提交未保存的持久数据更改,停止动画以及可能消耗CPU等的其他事情。此方法的实现必须非常快,因为在此方法返回之前,下一个活动将不会恢复。
您可能希望查看Activity's lifecycle的说明。