【问题标题】:Cordova check close app event and save date/timeCordova 检查关闭应用程序事件并保存日期/时间
【发布时间】:2014-11-05 21:06:03
【问题描述】:

当我的用户暂停他们的应用程序时,我将日期保存在 window.localStorage 对象中,以便当应用程序恢复时,我可以向我的服务器发送请求并查看是否有新消息发送给他们。这可行,但是当他们关闭应用程序并重新启动时,我需要再次设置日期,因此我无法检查他们关闭和重新启动之间是否有消息,因为这与暂停和恢复不同。这是一个代码示例来说明我的意思。

这是应用程序启动的时间:

$ionicPlatform.ready(function() {

    var now = new Date();
    var year =   now.getFullYear();
    var month =   now.getMonth() + 1;
    var days =   now.getDate();
    var hours =   now.getHours();
    var minutes =   now.getMinutes();
    var seconds =   now.getSeconds();
    var now = year + '-' + month + '-' + days + ' ' + hours + ':' + minutes + ':' + seconds; 
    window.localStorage.setItem('lastActive',now);

});

这些是暂停/恢复功能

document.addEventListener("resume", onResume, false);
document.addEventListener("pause", onPause, false);


function onResume() {
    if(window.localStorage.getItem('lastActive')){
        var lastActive = window.localStorage.getItem('lastActive');
        console.log('last seen on: '+lastActive);
        $http({method: 'get', url: '***/api.php/inbox/'+window.localStorage.getItem('auth')+'/'+lastActive}).
        success(function(data, status, headers, config) {
            if(data.new < 1){
                $scope.newcount = data.new
            }else{
                $scope.newcount = data.new
            }
        }).error(function(data, status, headers, config) {
            $cordovaToast.showShortTop("are you connected to the internet?").then(function(success) {

            }, function (error) {
                alert("are you connected to the internet?");
            });
        }); 
    }else{
        console.log('lastst online: unkown');
    }
}

function onPause() {
    var now = new Date();
    var year =   now.getFullYear();
    var month =   now.getMonth() + 1;
    var days =   now.getDate();
    var hours =   now.getHours() + 1;
    var minutes =   now.getMinutes();
    var seconds =   now.getSeconds();
    var now = year + '-' + month + '-' + days + ' ' + hours + ':' + minutes + ':' + seconds; 

    window.localStorage.setItem('lastActive',now);
    window.localStorage.setItem('lastActivejs',new Date());
}

现在,当应用程序关闭时,将再次触发 ionicplatform.ready 函数以设置最后一个活动日期,因为我无法在关闭时设置一个。我确定其他人必须处理这个问题,并想知道你是如何解决它的。

【问题讨论】:

    标签: javascript cordova ionic-framework


    【解决方案1】:

    这可能不适合你,但我通过将当前时间设置为 localStorage 每分钟一次来解决这个问题,然后当我的应用程序打开时,我的 ready() 函数所做的第一件事就是检查 @ 之间的差异987654323@ 值和Date.now()。这听起来像是一个性能杀手,但它在我的应用程序中工作得很好——最好在依赖它之前在你的应用程序中进行测试。我这样做:

    function ticker() {
      var n=Date.now();
      if (n%60000<20) {
        localStorage.setItem("last_tick",n);
      }
      requestAnimationFrame(ticker);
    }
    

    致电ticker() 开始。 requestAnimationFrame() 允许浏览器进行优化。但是,如果您的应用程序进入后台,WebKit 引擎会减慢调用ticker() 的频率并可能完全停止它,因此您可能会发现需要使用setInterval(),这可能会带来其自身的性能问题(尽管我仍然认为它会很好)。你的问题是其他人是如何解决这个问题的,这对我有用。

    【讨论】:

    • 谢谢,想试试,但我可能需要删除我的日期格式,否则会影响我的表现
    • 您的意思是在您的onPause 函数中?如果是这样,我会将您的 localStorage 字符串存储为 Date.now() 返回的值。您可以在检索时进行所有格式处理。
    • 想想看,一个简单的setInterval(localStorageSettingFunction, 60000) 可能是你最好的选择。
    • 搞砸了一会儿,找到了一种在不影响性能的情况下使用它的方法,谢谢!
    • 没问题,如果我在自己的应用程序中发现了一种不那么老套的方法,我会在这里发布,但它可能总是依赖于cordova API。可能有一个本机插件可以在用户关闭您的应用程序之后但在操作系统实际关闭应用程序之前运行代码,但我无法通过快速谷歌找到一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多