如何在 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 应用程序退出时保存状态?的主要内容,如果未能解决你的问题,请参考以下文章

退出时如何保存 Activity 的状态?安卓

退出应用程序并重新加载时保存 UIButton 的状态

如何从 Cordova 中的 android 设备后退按钮退出应用程序?

如何在启动时更改 phonegap/cordova 状态栏背景(启动画面)?

在 cordova/phonegap Android 应用程序上关闭屏幕后媒体停止播放

当应用程序在 Cordova 中退出时会发生啥事件?