gpt4 book ai didi

android - Android 中 BroadcastReceiver 中的 AsyncTask 在死线程错误上向处理程序发送消息

转载 作者:行者123 更新时间:2023-11-29 14:23:36 25 4
gpt4 key购买 nike

我已经在我的应用程序中实现了推送通知。收到推送消息后,我会在 AsyncTask 的帮助下调用 Web 服务。当应用程序正在使用或在内存中时,这可以正常工作。但是,如果我从设置中停止应用程序,然后将消息推送到设备,则会出现异常,例如“在死线程上向处理程序发送消息”。这可能是因为该应用程序未上线。

有人可以告诉我是否可以从推送通知接收器中实际删除 AsyncTask 并只处理消息吗?

问候苏尼尔

最佳答案

这是由于 Android 框架中 AsyncTask 的一个错误。 AsyncTask.java 具有以下代码:

private static final InternalHandler sHandler = new InternalHandler();

它希望它在主线程上初始化,但这并不能保证,因为它会在恰好导致类运行其静态初始化器的任何线程上初始化。我在处理程序引用工作线程的地方重现了这个问题。

导致这种情况发生的常见模式是使用 IntentService 类。 C2DM 示例代码执行此操作。

一个简单的解决方法是将以下代码添加到应用程序的 onCreate 方法中:

Class.forName("android.os.AsyncTask");

这将强制在主线程中初始化 AsyncTask。我在 android 错误数据库中提交了一个错误。参见 http://code.google.com/p/android/issues/detail?id=20915 .

关于android - Android 中 BroadcastReceiver 中的 AsyncTask 在死线程错误上向处理程序发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com