大佬教程收集整理的这篇文章主要介绍了android – 此消息无法回收,因为它仍在使用中,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import android.os.Handler; import android.os.HandlerThread; import android.os.message; import java.net.DatagramSocket; import java.net.socketException; public class UdpThread extends HandlerThread { private static final String TAG = "UDP"; private final Handler uiHandler,workerHandler; private final DatagramSocket socket = new DatagramSocket(); public UdpThread(final Handler uiHandler,final String hostname,final int port) throws SocketException { super(tag); thiS.UiHandler = uiHandler; start(); workerHandler = new Handler(getLooper(),new Handler.CallBACk() { @Override public Boolean handlemessage(final message msg) { /* if (msg.what == port && msg.obj == hostName) { final InetSocketAddress address = new InetSocketAddress(hostname,port); Log.d(tag,"ConnecTing to " + address); try { socket.connect(address); } catch (SocketException sE) { throw new RuntimeException(sE); } } */ msg.recycle(); //java.lang.IllegalStateException: This message cAnnot be recycled because it is still in use. return true; } }); workerHandler.obtainmessage(port,hostName).send@R_584_10586@rget(); } }
但是当我运行代码时,我得到了提到的java.lang.IllegalStateException:此消息无法回收,因为它仍在使用中.当试图回收消息时.为什么这样以及如何解决它并防止内存泄漏?
public void recycle() { if (isInUse()) { if (gcheckRecyclE) { throw new IllegalStateException("This message cAnnot be recycled because it " + "is still in use."); } return; } recycleUnchecked(); }
因此,如果正在使用它,您将收到IllegalStateException
isInUse()只是检查标志,看起来像:
Boolean isInUse() { return ((flags & FLAG_IN_USE) == FLAG_IN_USE); }
当我们尝试阅读该标志时,我们会看到描述:
那么我们有什么
>你不能回收消息,直到它“正在使用”
>在获得或创建新消息之前,它“正在使用中”
如何解决问题
在message类中有一个方法recycleUnchecked()来回收消息对象,即使它正在使用中.想要你需要的东西!说明:
最糟糕的是它在内部使用并具有包访问权限.当你打电话时它在内部使用的好东西:
handler.removemessages(int what)
所以我想最终解决方案是:
更换
@H_571_4@msg.recycle();至
try { msg.recycle(); //it can work in some situations } catch (IllegalStateException E) { workerHandler.removemessages(msg.what); //if recycle doesnt work we do it manually }
以上是大佬教程为你收集整理的android – 此消息无法回收,因为它仍在使用中全部内容,希望文章能够帮你解决android – 此消息无法回收,因为它仍在使用中所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。