如何在Cordova App Exit上保存状态?

时间:2016-04-06 15:39:23

标签: android ios windows cordova ionic-framework

我有一个cordova(离子)应用程序,便于输入大量的表格数据。此表单数据将保存到localStorage,直到可以发布为止。

所以保持应用程序快速我不是每次都保存到磁盘并输入更改。当用户离开页面时我正在保存。

我遇到的问题是用户可能在一个页面上输入大量数据,并在不导航的情况下关闭应用程序。这是一个明显的用例,但我不知道如何在不经常返回磁盘的情况下摆脱它。

有什么方法可以在退出应用程序时快速保存?我知道我可以听听cordova应用程序中的“暂停”事件,但退出应用程序时是否也一样?退出是否会发出“暂停”?

如果没有,处理此问题的策略是什么?

3 个答案:

答案 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 的当前状态,只需使用不同的选择器即可。