【发布时间】:2014-07-23 03:39:42
【问题描述】:
(注意:以下指的是适用于 Windows Phone 8.1 的 Hub 应用程序)
当 Windows Phone 挂起时,所有未保存的数据都会丢失。添加/更改数据时是否应保存数据?还是应该在暂停时保存?还是两者兼而有之?
具体来说:
需要永久维护的重要数据,我认为保存它没有问题。但如果它只是需要几秒钟的数据,除非应用程序暂停,否则保存它似乎有点过头了。
用一种方法一次保存所有内容似乎也更简洁,但这可能只是我个人的偏好。
如果数据应该在暂停时保存,它在以下方法中的位置是否重要? (这在OnSuspending() 方法中调用。)
public static async Task SaveAsync()
{
try
{
// Save the navigation state for all registered frames
foreach (var weakFrameReference in _registeredFrames)
{
Frame frame;
if (weakFrameReference.TryGetTarget(out frame))
{
SaveFrameNavigationState(frame);
}
}
// Serialize the session state synchronously to avoid asynchronous access to shared
// state
MemoryStream sessionData = new MemoryStream();
DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes);
serializer.WriteObject(sessionData, _sessionState);
// Get an output stream for the SessionState file and write the state asynchronously
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename, CreationCollisionOption.ReplaceExisting);
using (Stream fileStream = await file.OpenStreamForWriteAsync())
{
sessionData.Seek(0, SeekOrigin.Begin);
await sessionData.CopyToAsync(fileStream);
}
}
catch (Exception e)
{
throw new SuspensionManagerException(e);
}
}
还有一个附带的问题,恢复数据应该只是在NavigationHelper_LoadState() 方法中预先加载,对吧?
【问题讨论】:
标签: c# windows-phone-8.1 savestate suspend