我知道以下是违反所有Android最佳实践的...所以请对我好一点:-)
我们有一个很大的遗留软件,不容易转换。应用程序确实在UI线程上做了很多事情。因此,在某些情况下,Android有时会认为我们的应用处于死锁状态。所以它提示用户ANR(应用程序没有响应->等待,或关闭?)我们的用户知道我们的软件在某些部分上架构不好,所以点击“等待”...在Android 7到12上,ANR会自行清除。mainThread再次响应,因此应用程序可以正常工作。但在Android 13上,情况并非如此。mainThread再次响应,应用程序可以正常使用,但ANR消息每5秒返回一次。
在一个简单的Kotlin应用程序中,这可以用最小的努力来尝试。
- 创建带有两个按钮和一个标签的Activity
- 第一个按钮增加计数器并刷新标签
- 第二个按钮有一个5秒的睡眠时间(让它12秒,所以你是100%的问题)
如果首先按下睡眠按钮,然后多次按下增加按钮,应用程序首先冻结,当睡眠时间结束时,标签会刷新我们按下的次数。5秒后,ANR消息传来...单击等待.... ANR又来了……一次又一次...
听起来像是Android 13中的一个问题。
有没有一种很好的方法来清除主线程的消息队列,这样Android就不会一遍又一遍地尝试传递消息?
谢谢你的帮助...
1条答案
按热度按时间jtoj6r0c1#
我认为你有一个非常糟糕的方法:-)
你不能把长任务交给UI来处理。在你的代码中,你可以简单地使用例如。android的Handler(UI,主线程)结合Runnable(后台线程),你将解决所有问题。此外,您可以根据需要从Runnable调用runOnUiThread(new Runnable),问题就解决了。
例如,您可以执行以下操作:
希望我没有答错。