Android 应用程序遇到了一些 ANR 问题,因此我实现了 StrictMode 策略。以前从未使用过这个,所以希望有人可以帮助解释以下内容:
为什么日志显示 2 个看似相似的违规行为,除了前 4 行和持续时间不同?为什么还是有 2 次违规——这是否意味着代码被执行了两次?
感谢任何帮助
08-15 14:24:14.314: DEBUG/StrictMode(767): StrictMode policy violation; ~duration=13876 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=17 violation=1
at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:732)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1791)
at com.j256.ormlite.android.AndroidCompiledStatement.execSql(AndroidCompiledStatement.java:151)
at com.j256.ormlite.android.AndroidCompiledStatement.runUpdate(AndroidCompiledStatement.java:70)
at com.j256.ormlite.stmt.StatementExecutor.update(StatementExecutor.java:382)
at com.j256.ormlite.dao.BaseDaoImpl.update(BaseDaoImpl.java:374)
at conx.Repositories.JobRepository.update(JobRepository.java:381)
at conx.Presenters.JobSchedulePresenter.onSave(JobSchedulePresenter.java:200)
at conx.Activities.JobScheduleActivity.onSaveEvent(JobScheduleActivity.java:111)
at conx.Activities.JobScheduleActivity.access$100(JobScheduleActivity.java:43)
at conx.Activities.JobScheduleActivity$2.onChildClick(JobScheduleActivity.java:169)
at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1877)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
08-15 14:24:14.314: DEBUG/StrictMode(767): StrictMode policy violation; ~duration=12086 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=17 violation=1
at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:732)
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:52)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1809)
at com.j256.ormlite.android.AndroidCompiledStatement.execSql(AndroidCompiledStatement.java:151)
at com.j256.ormlite.android.AndroidCompiledStatement.runUpdate(AndroidCompiledStatement.java:70)
at com.j256.ormlite.stmt.StatementExecutor.update(StatementExecutor.java:382)
at com.j256.ormlite.dao.BaseDaoImpl.update(BaseDaoImpl.java:374)
at conx.Repositories.JobRepository.update(JobRepository.java:381)
at conx.Presenters.JobSchedulePresenter.onSave(JobSchedulePresenter.java:200)
at conx.Activities.JobScheduleActivity.onSaveEvent(JobScheduleActivity.java:111)
at conx.Activities.JobScheduleActivity.access$100(JobScheduleActivity.java:43)
at conx.Activities.JobScheduleActivity$2.onChildClick(JobScheduleActivity.java:169)
at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:588)
at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1877)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
最佳答案
StrictMode 违规表明您正在导致 ANR 问题的 UI 线程上执行 SQLite 查询。
尝试在单独的线程上执行数据库交互,这将防止出现 ANR 问题并防止显示这些 StrictMode 违规行为。
通过浏览 LogCat 输出,它看起来像是发生在 conx.Activities.JobScheduleActivity.onSaveEvent
一些有用的读物:
关于Android StrictMode 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963601/
我想使用两种不同的protect_from_forgery策略构建一个Rails应用程序:一种用于Web应用程序,一种用于API。在我的应用程序Controller中,我有这行代码:protect_from_forgerywith::exception为了防止CSRF攻击,它工作得很好。在我的API命名空间中,我创建了一个继承self的应用程序Controller的api_controller,它是API命名空间中所有其他Controller的父类,我将上面的代码更改为:protect_from_forgery:null_session.遗憾的是,我在尝试发出POST请求时遇到错误:“
HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca
我正在开发一个将XML发布到某些网络服务的小型应用程序。这是使用Net::HTTP::Post::Post完成的。但是,服务提供商建议使用重新连接。类似于:第一个请求失败->2秒后重试第二个请求失败->5秒后重试第三次请求失败->10秒后重试...这样做的好方法是什么?简单地在循环中运行以下代码,捕获异常并在一定时间后再次运行?或者还有其他聪明的方法吗?也许Net包甚至有一些我不知道的内置功能?url=URI.parse("http://some.host")request=Net::HTTP::Post.new(url.path)request.body=xmlrequest.con
我有这个原始文本:________________________________________________________________________________________________________________________________PosCarCompetitor/TeamDriverVehicleCapCLLapsRace.TimeFastest...Lap16JasonClementsJasonClementsBMWM33200109:48.571030:57.3228*242DavidSkillenderDavidSkillenderHo
现在已经为此奋斗了一段时间,不确定为什么它不起作用。要点是希望将Devise与LDAP结合使用。除了身份验证外,我不需要做任何事情,所以除了自定义策略外,我不需要使用任何东西。我根据https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP创建了一个据我所知,一切都应该正常工作,除了每当我尝试运行服务器(或rake路由)时,我得到一个NameErrorlib/devise/models.rb:88:in`const_get':uninitializedconstantDevise::Models:
我正在使用Grape和Rails创建RESTAPI。我有基本的架构,我正在寻找“清理”东西的地方。其中一个地方是错误处理/处理。我目前正在为整个API修复root.rb(GRAPE::API基类)文件中的错误。我格式化它们,然后通过rack_response发回错误。一切正常,但root.rb文件变得有点臃肿,所有错误都被修复,其中一些有需要完成的特殊解析。我想知道是否有人制定了一个好的错误处理策略,以便可以将其移出到它自己的模块中,并使root.rb(GRAPE::API基类)相当精简。我很想创建一个错误处理模块并为每种类型的错误定义方法,例如...moduleAPImoduleEr
我正在开发一个利用twitteroauth的应用程序,但在试图弄清楚如何测试twitteroauth时遇到了障碍。特别是尝试使用Cucumber和Webrat/Selenium来测试功能——注册/登录过程中的某些步骤在用户是否授予对应用程序的oauth访问权限等方面表现不同。有没有人在他们的RubyonRailsCucumber功能(或与此相关的任何其他测试框架)中成功模拟或stub部分或全部TwitterOAuth系统?任何帮助将不胜感激。 最佳答案 OP已经一年多了,但我最近发现这篇关于使用TwitterAuth和Cucumbe
目前我正在处理Rails4项目,现在我必须链接/连接另一个应用程序(不是sso,而是用于访问API),比如example.com。(注意example.com使用三足式oauth安全架构)搜索后发现必须要实现omniouth策略。为此我引用了this关联。根据Strategy-Contribution-Guide我能够完成设置和请求阶段,您可以在此处找到我的示例代码。require'multi_json'require'omniauth/strategies/oauth2'require'uri'moduleOmniAuthmoduleStrategiesclassMyAppStrat
我更新到第3章,似乎不再支持set:deploy_via,:copy。在releaseannoucement有一个视频链接用于复制当前返回404的复制策略。我使用了:copy策略,因为服务器无法访问git或访问存储库,因为它在防火墙后面。用v3复制此功能的最佳方法是什么? 最佳答案 我遇到了同样的问题,并在capistranogooglegroup上发布了类似的问题。参见此处:https://groups.google.com/forum/#!topic/capistrano/BRa4Vj1_mEo简短回答:编写您自己的rake任务
问题有没有可以保持的最佳值(value),这样我才能赢得尽可能多的比赛?如果是这样,那是什么?编辑:是否可以为给定的限制计算出确切的获胜概率,而与对手的所作所为无关?(自大学以来,我还没有做过概率和统计)。我有兴趣将其作为与模拟结果进行对比的答案。编辑:修复了我算法中的错误,更新了结果表。背景我一直在玩改进的二十一点游戏,其中对标准规则进行了一些相当烦人的规则调整。我已将与标准二十一点规则不同的规则斜体化,并为不熟悉的人添加了二十一点规则。修改二十一点规则正是两个人类玩家(经销商无关)每个玩家面朝下发两张牌双方玩家_ever_都不知道对手纸牌的_any_的值在_both_完成手牌之前,