我已经创建了一个可以保存到 iPhone 上“主屏幕”的网络应用程序。该应用程序使用 Canvas ,并且与不断变化的状态相当互动。
每当应用程序被最小化并重新打开时,它会重置回初始状态。关闭应用程序并重新加载时会发生相同的情况(正如预期的那样)。
如何防止应用程序在最小化时重新加载?
持久化状态数据的最佳方式是什么,以便在应用程序运行时 关闭并重新打开它会无缝地继续吗?
我需要使用哪些事件来确保状态数据不丢失?
如果可能的话,首选 iPhone + Android 的跨平台解决方案...
最佳答案
长话短说 您需要将您的应用程序设计为使用本地存储或 cookie 或其他一些可以保存状态的机制。每次启动时都需要查看此本地存储并重建其界面。使用本地存储或 webdb(已折旧但受支持),您需要保存每个状态更改并确保在浏览器中加载页面时重新加载它们。
定义最小化?在后台运行?
您的网络应用程序,无论其在主屏幕上的状态如何,都只是加载到浏览器中的另一个页面。由于 a) 设备内存不足以及 b) 多任务处理的工作原理,操作系统可能会要求应用程序释放内存,甚至随时终止它们自己。
这就是为什么在构建 iOS 应用程序时:
- (void)applicationWillTerminate:(UIApplication *)application
此方法允许您作为开发人员指定在您的应用程序从操作系统接收到终止信号时终止之前要使用的行为(例如保存用户数据)。这也是为什么 iOS 开发人员指南要求您保留状态并始终确保在将应用程序带到前台时恢复您的状态。 (用户可能不知道某个应用程序已终止,因为当您双击主页时,它仍会出现在“正在运行的应用程序”列表中)。
现在我知道您在谈论网络应用程序,但这很重要。网页,我相信你的网页也会占用手机中的一些内存——你有 DOM、所有资源、关于页面所在位置以及哪些小部件被设置为什么的状态信息。你说你的应用程序使用 Canvas 和其他东西相当互动——我敢肯定它会占用大量内存。
因此,当您将 Safari 置于后台时,Safari 很可能会破坏您的内存缓存。
Safari 可以访问本地存储和 cookie 数据。 iOS5 也可以访问 WebSQL(但没有 IndexedDB,这很遗憾,因为 WebSQL 已贬值)。选择你的毒药。
您需要始终保存状态。由于您无法通过 JS 访问 UIApplicationDelegate 方法,因此每次用户执行某些操作时,您都需要保存该状态更改。每次重新加载页面时,它都需要检查持久状态并从您选择的存储选项重新加载。
关于javascript - 主屏幕持久性上的 iPhone WebApp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7981208/
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到
我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/
我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN