"应用程序没有响应"并且用户选择"关闭"应用而不是"等待"

时间:2014-07-25 18:37:35

标签: java android dialog parse-platform android-anr-dialog

背景故事:

我一直在构建一个可以进行多次计算并构建复杂图形的应用程序。有时,当用户快速点击图表时(我的图表有触摸式监听器,但不会同时疯狂点击用户可能会这样做),应用程序会询问用户是否要等待"等待"或"关闭"应用程序,因为需要更多次来计算值。当用户点击"等待"时,一切正常并且加载了值。但是如果用户关闭"应用程序,然后它取消初始化我的代码使用我的Parse数据库,因此应用程序无法访问任何信息,包括使应用程序毫无意义的图形信息。

问题:

有没有办法检查用户是否选择了"关闭"而不是"等待"?这样我就可以重新使用我的数据库。


更新:

我用严格的模式想出来了。

 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectAll()
    .penaltyLog()
    .build());

我希望这可以帮助别人。

2 个答案:

答案 0 :(得分:1)

close-or-wait是系统生成的对话框,通常称为ANR on the Android平台。此对话框是应用程序在过去5秒左右没有响应的方案的结果。在这种情况下,我假设您在用户单击特定视图时启动网络呼叫或复杂(计时)计算。如果是这种情况,当用户严格点击它时,系统会启动多个线程,这反过来会进一步减慢进程。我建议你阅读本文的以下部分。

How to keep your application Responsive

希望这会有所帮助。 PS: - 这个问题与Parse没有直接关系。

答案 1 :(得分:0)

您需要在单独的工作线程中执行此类耗时的计算。只有当主(UI)线程通过计算阻止输入ANR消息出现一定时间长度时。

你应该提出一个"请等待"正在对您的工作线程执行加载时,主线程上的对话框或进度条,并让工作线程更新UI线程的完成百分比,然后可以反映在其上的进度显示中UI线程,包括最后在加载完成时删除该显示。