gpt4 book ai didi

javascript - Cordova 检查关闭应用程序事件并保存日期/时间

转载 作者:行者123 更新时间:2023-11-30 05:31:25 26 4
gpt4 key购买 nike

当我的用户暂停他们的应用程序时,我将日期保存在 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 函数会再次触发以设置最后的事件日期,因为我无法将其设置为关闭。我确定其他人必须处理这个问题,并且想知道您是如何解决的。

最佳答案

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

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

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

关于javascript - Cordova 检查关闭应用程序事件并保存日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com