Android的Looper因设备而异

时间:2016-06-03 22:14:43

标签: android

我有一些奇怪的行为。在Samsung S6上,我的应用程序崩溃了Looper异常,它说无法在不调用looper.prepare()的线程内创建处理程序。

没关系,我理解并且同样发生在LG上,但最奇怪的是我得到了华为p8 lite和谷歌Nexus 6,我没有那么崩溃。

通过谷歌搜索我找不到任何资源。

我只是简单地在那里做吐司,这种变化让我感到困惑。问题是为什么我在三星和lg上崩溃但在huawei和nexus我没有?

1 个答案:

答案 0 :(得分:1)

要正确回答该问题,必须了解这些经过修改的Android版本的实施细节。 AFAIK的正确行为是,如果从裸线程创建了一个looper,则应该抛出异常。

处理程序是否适用于Nexus和华为?你能用这个处理程序发布和执行runnables吗?也许它在默默地失败了。也许它在内部调用Looper.prepare()?您可以使用Looper / Handler.dump()调试loopers / handler。请参阅:https://developer.android.com/reference/android/os/Looper.html#dump(android.util.Printer,java.lang.String)和https://developer.android.com/reference/android/os/Handler.html#dump(android.util.Printer,java.lang.String)

您可以通过调用currentSlide来获取主线程的循环器。在您的情况下使用应该是安全的。

请参阅:https://developer.android.com/reference/android/os/Looper.html#getMainLooper()