背景故事:
我一直在构建一个可以进行多次计算并构建复杂图形的应用程序。有时,当用户快速点击图表时(我的图表有触摸式监听器,但不会同时疯狂点击用户可能会这样做),应用程序会询问用户是否要等待"等待"或"关闭"应用程序,因为需要更多次来计算值。当用户点击"等待"时,一切正常并且加载了值。但是如果用户关闭"应用程序,然后它取消初始化我的代码使用我的Parse数据库,因此应用程序无法访问任何信息,包括使应用程序毫无意义的图形信息。
问题:
有没有办法检查用户是否选择了"关闭"而不是"等待"?这样我就可以重新使用我的数据库。
更新:
我用严格的模式想出来了。
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
我希望这可以帮助别人。
答案 0 :(得分:1)
close-or-wait
是系统生成的对话框,通常称为ANR on the Android平台。此对话框是应用程序在过去5秒左右没有响应的方案的结果。在这种情况下,我假设您在用户单击特定视图时启动网络呼叫或复杂(计时)计算。如果是这种情况,当用户严格点击它时,系统会启动多个线程,这反过来会进一步减慢进程。我建议你阅读本文的以下部分。
How to keep your application Responsive
希望这会有所帮助。 PS: - 这个问题与Parse没有直接关系。
答案 1 :(得分:0)
您需要在单独的工作线程中执行此类耗时的计算。只有当主(UI)线程通过计算阻止输入ANR消息出现一定时间长度时。
你应该提出一个"请等待"正在对您的工作线程执行加载时,主线程上的对话框或进度条,并让工作线程更新UI线程的完成百分比,然后可以反映在其上的进度显示中UI线程,包括最后在加载完成时删除该显示。