我有一些奇怪的行为。在Samsung S6上,我的应用程序崩溃了Looper
异常,它说无法在不调用looper.prepare()
的线程内创建处理程序。
没关系,我理解并且同样发生在LG上,但最奇怪的是我得到了华为p8 lite和谷歌Nexus 6,我没有那么崩溃。
通过谷歌搜索我找不到任何资源。
我只是简单地在那里做吐司,这种变化让我感到困惑。问题是为什么我在三星和lg上崩溃但在huawei和nexus我没有?
答案 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()