我有一个应用程序,一个包含 fragment 的单一 Activity 应用程序。
这个应用程序的通常用例是,你启动它并 Handlebars 机拿开,时不时地,你回到手机并插入一些数据......这是一个日志应用程序,你正在做一些事情并且将您的结果插入应用程序...
我有一个问题,我的 Activity 时不时地被破坏并用一个空包重新创建...(大多数时候情况并非如此,但偶尔会发生这种情况...) .我的应用程序有时会启动一个服务,在这种情况下甚至这个服务也会被杀死......
这意味着系统已终止我的应用程序,对吗?我怎样才能避免这种情况?
我需要保留用户数据和当前的顶级 fragment ...并将它们保存到包中,只要保存它们的状态和数据,一切都会正常进行...
顺便说一句,我的 Activity 始终是 TOP ACTIVITY,只是屏幕经常关闭......我只想让我的 Activity 尽可能长时间地保持 Activity 状态,直到用户使用后退按钮离开它......或者可靠地保存状态
重要提示
onSaveInstance 并不总是有效(它不是生命周期的一部分,因此不能保证被调用)...它只在大部分时间有效...我需要一种始终有效的方法...如果 android 终止了我的应用...
最佳答案
您不想阻止 Android 终止您的应用程序。您想要的是正确恢复应用程序的状态。然后用户将永远不会注意到该应用程序已被销毁,并且用户仍然可以获得在不使用时被销毁的应用程序的好处。
如果您真的想要这个,请使用唤醒锁。这会耗尽你的用户电池,所以我在实现这个之前三思而后行......信息在How do I prevent an Android device from going to sleep programmatically?
为此,请检查 bundle 中需要哪些信息,并使用 onSaveInstanceState(bundle:Bundle) 方法保留该信息,以便您可以在 onCreate(sameBundle:Bundle).
Google 文档中提供了更多信息,网址为 Save your Activity state和 Restore your Activity State .
如 @prom85 在下面的评论中所述,不能保证 onSaveInstanceState 方法会被调用,因为它不是生命周期的一部分。解决此问题的方法是使用 onPause 生命周期 Hook 来确保存储您的数据。
更多信息请访问 Android: onSaveInstanceState not being called from activity
关于android - 尽可能长时间地防止 Activity 被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22168287/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
最近,我安装了OSXMavericks,它似乎弄乱了我的开发环境。我在运行“railsnewfirst_app”后收到此消息:Youruseraccountisn'tallowedtoinstalltothesystemRubygems.Youcancancelthisinstallationandrun:bundleinstall--pathvendor/bundletoinstallthegemsinto./vendor/bundle/,oryoucanenteryourpasswordandinstallthebundledgemstoRubygemsusingsudo.Pass
升级到OSXYosemite后,我现有的pow.cx安装不起作用。升级到最新的pow.cx无效。通过事件监视器重新启动它也没有成功。 最佳答案 卸载(!)并重新安装解决了这个问题。curlget.pow.cx/uninstall.sh|shcurlget.pow.cx|sh 关于ruby-on-rails-OSXYosemite更新破坏了pow.cx,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
我有一个将某些事件写入队列的Rails3应用。现在我想在服务器上创建一个服务,每x秒轮询一次队列,并按计划执行其他任务。除了创建ruby脚本并通过cron作业运行它之外,还有其他稳定的替代方案吗? 最佳答案 尽管启动基于Rails的持久任务是一种选择,但您可能希望查看更有序的系统,例如delayed_job或Starling管理您的工作量。我建议不要在cron中运行某些东西,因为启动整个Rails堆栈的开销可能很大。每隔几秒运行一次它是不切实际的,因为Rails上的启动时间通常为5-15秒,具体取决于您的硬件。不过,每天这样做几
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我遇到了ruby正则表达式的问题。我需要找到所有(可能重叠的)匹配项。这是问题的简化:#Simpleexample"Hey".scan(/../)=>["He"]#Actualresults#Withoverlappingmatchestheresultshouldbe=>["He"],["ey"]我尝试执行并获得所有结果的正则表达式如下所示:"aaaaaa".scan(/^(..+)\1+$/)#Thislooksformultiplesof(here)"a"biggerthanonethat"fills"theentirestring."aa"*3=>true,"aaa"*2=
我在新的Rails应用程序(3.2.3)中运行迁移时遇到了问题。我们正在使用postrgres9.1.3和-pg(0.13.2)-当我运行rakedb:create,然后运行rakedb:migrate,我得到->1.9.3-p194(master)rakedb:migrate--trace**Invokedb:migrate(first_time)**Invokeenvironment(first_time)**Executeenvironmentrakeaborted!PG::Error:ERROR:relation"roles"doesnotexistLINE4:WHEREa