如何在 Cordova 应用程序退出时保存状态?
Posted
技术标签:
【中文标题】如何在 Cordova 应用程序退出时保存状态?【英文标题】:How to Save State on Cordova App Exit? 【发布时间】:2016-07-27 03:17:32 【问题描述】:我有一个 Cordova(离子)应用程序,可以方便地输入大量表单数据。此表单数据会保存到 localStorage,直到准备好发布。
所以让应用程序保持快速我不会每次都保存到磁盘并输入更改。当用户离开页面时,我正在保存。
我遇到的问题是用户可能会在一个页面上输入大量数据,然后在没有导航的情况下关闭应用程序。这是一个明显的用例,但我不确定如何在不经常返回磁盘的情况下进入它。
有什么方法可以在应用退出时快速保存?我知道我可以在科尔多瓦应用程序中收听“暂停”事件,但退出应用程序时是否相同?退出会发出“暂停”吗?
如果不是,有什么应对策略?
【问题讨论】:
【参考方案1】:TLDR:聆听暂停事件是正确的策略。
本机平台放置应用程序时触发暂停事件 进入后台,通常当用户切换到不同的 应用。 Source
暂停事件是让您知道您的应用正在后台运行的唯一方法。在某些移动平台上,您甚至无法退出您的应用程序(例如在 ios 中),因为该平台正在为您进行管理。所以收听暂停事件是你唯一的选择,因为一旦应用程序暂停,你就会失去控制。因此,监听暂停事件是正确的策略。
见以下代码sn-p:
document.addEventListener("pause", onPause, false);
function onPause()
// Save the application state here
详细来说,我已经实现了一个带有保存方法的存储服务,该方法在 OnPause-handler 中调用。
【讨论】:
【参考方案2】:Pause 仅在进入后台时触发。为什么说“让应用程序保持快速”?它是 javascript,您可以在填充每个字段时将其保存到磁盘,并且它可以是 异步。
【讨论】:
【参考方案3】:function onLoad()
document.addEventListener("deviceready", onDeviceReady, false);
document.addEventListener("pause", onPause, false);
function onDeviceReady()
var pageNow = document.getElementsByTagName(body);
var currentPage = JSON.stringify(pageNow);
localStorage.setItem("uiState", currentPage);
function onPause()
//retrieve info here
var pageShow = document.getElementsByTagName(body);
let techStack = localStorage.getItem("uiState");
// JSON.parse(techStack); //unnecessary because the parser will detect html
pageShow.innerHTML(techStack);
您可以在任何元素中获取 UI 的当前状态,只需使用不同的选择器。
【讨论】:
以上是关于如何在 Cordova 应用程序退出时保存状态?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Cordova 中的 android 设备后退按钮退出应用程序?
如何在启动时更改 phonegap/cordova 状态栏背景(启动画面)?