我有一个cordova(离子)应用程序,便于输入大量的表格数据。此表单数据将保存到localStorage,直到可以发布为止。
所以保持应用程序快速我不是每次都保存到磁盘并输入更改。当用户离开页面时我正在保存。
我遇到的问题是用户可能在一个页面上输入大量数据,并在不导航的情况下关闭应用程序。这是一个明显的用例,但我不知道如何在不经常返回磁盘的情况下摆脱它。
有什么方法可以在退出应用程序时快速保存?我知道我可以听听cordova应用程序中的“暂停”事件,但退出应用程序时是否也一样?退出是否会发出“暂停”?
如果没有,处理此问题的策略是什么?
答案 0 :(得分:1)
TLDR:聆听暂停事件是正确的策略。
当本机平台放置应用程序时会触发pause事件 进入后台,通常是当用户切换到不同的时候 应用。 Source
暂停事件是让您知道您的应用在后台投放的唯一方法。在某些移动平台上,您甚至无法退出应用程序(例如在iOS中),因为平台正在为您管理此应用程序。因此,只要暂停应用程序,您就可以轻松控制暂停事件。因此,听取暂停事件是正确的策略。
请参阅以下代码段:
public class ListenGPIO {
private long lastFiredMillis = -1;
public static void main(String args[]) throws InterruptedException {
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, PinPullResistance.PULL_DOWN);
myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
if(lastFiredMillis == -1 || (System.currentTimeMillis() - lastFiredMillis) > 15 * 60 * 1000) {
lastFiredMillis = System.currentTimeMillis();
System.out.println(" --> GPIO PIN STATE CHANGE: " + event.getPin() + " = " + event.getState());
}
}
});
}}
详细地说,我已经使用保存方法实现了一个存储服务,该方法在OnPause处理程序中调用。
答案 1 :(得分:0)
暂停仅在转到后台时触发。为什么你说'#34;保持应用程序快速"?它是javascript,你可以在填充时保存到磁盘的每个字段,它可以是异步。
答案 2 :(得分:0)
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 的当前状态,只需使用不同的选择器即可。