每隔几秒启动singleTask活动就会在Android中产生ANR

时间:2014-04-29 05:36:51

标签: android android-activity

在应用程序中,我有一个具有启动模式为singleTask的活动。有许多用例通过此活动,因此被称为次数。通过运行monkeyrunner脚本并每隔几秒调用此活动对应用程序进行压力测试会导致ANR。

我想,大多数用例通过此活动时的设计方式并不正确,但我无法改变此设计。

反正ANR可以被抑制吗?我的意思是,将UI操作添加到事件队列,以便它不会阻止主UI线程,也不会给出ANR。

1 个答案:

答案 0 :(得分:0)

从问题中不清楚您的活动是(或应该)做什么的。可能你需要一个服务。

在后台线程中执行耗时的操作并将结果传递给UI线程是很常见的。

您可以使用课程Handler / Looper(它更容易发送Runnable而非邮件),或使用AsyncTask。但AsyncTask仍然很棘手,这将在此处讨论:Is AsyncTask really conceptually flawed or am I just missing something?。 AFAIK谷歌试图修复典型的错误,并使新行为与旧版本不兼容(也就是说,我已经看到一些关于较新的机器人的不当行为,这可能是由于假设因为某些版本线程执行asynctask作业在活动后被杀死开始他们离开了屏幕。)

我可以猜测singleTask是你的方式来对抗一个活动在屏幕转动时死亡的事实,并且会有新的事件发生。我建议你使用单例(它们可以在屏幕旋转中存活但在重启过程中无法生存,有时在Android中会发生这种情况)。 (用户切换到像相机一样的应用程序,拍摄大照片,返回 - 然后重新启动活动,因为相机需要内存。在实践中看到了这一点,但那次我没有试图找出整个过程是否是重新启动。)

无论如何,请添加日志记录,告诉您何时输入和离开您的活动,包括onNewIntent()和其他生命周期功能(为了安全起见,我建议也打印线程名称)。然后你可能会看到发生了什么。