Android Socket、AsyncTask、Handler 内存泄漏

Posted

技术标签:

【中文标题】Android Socket、AsyncTask、Handler 内存泄漏【英文标题】:Android Socket, AsyncTask, Handler memory leak 【发布时间】:2019-02-13 11:45:28 【问题描述】:

我感到很沮丧。几天后,我举起白旗寻求帮助。 我使用了这个代码示例:

https://github.com/sht5/android-tcp-server-and-client

但是每次我尝试建立连接时,内存使用量都会增加大约 500KB,因此如果客户端在多次尝试后断开连接然后重新连接而不关闭应用程序,内存就会饱和。

我已经尝试过各种方法,包括 cancel (true)AsyncTask's doInbackground, 关闭并强制套接字和输入、输出对象为空 致电System.gc () 但这些都不起作用。

【问题讨论】:

整个代码在我看来非常难看,因为它使用了很多静态字段。它也很旧(4 年),所以我会寻找更新的东西而不是试图让它工作。 @Pawel,我明白你的意思。不幸的是,我没有找到任何可以满足我的需求和可用资源的最新信息。除了内存问题之外,代码还可以工作,我可以同时在不同设备之间进行通信,也可以与 Windows 进行通信,我已经编写了在 Delphi 中工作的代码。你知道一些书面的例子更好吗?如果有,请传给我,谢谢。 【参考方案1】:

我不确定,但尝试调用 AsyncTask 为

new InitTCPClientTask().execute(new Void[0]);

而不是

InitTCPClientTask task = new InitTCPClientTask();
task.execute(new Void[0]);

【讨论】:

以上是关于Android Socket、AsyncTask、Handler 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

android socket客户端pc服务器使用asynctask

如何在 AsyncTask 类中添加更多方法?

Android:我在哪里可以在服务中实现 socket.on(...)?我多次收到相同的消息

Android面试Android异步任务AsyncTask

Android自助餐之AsyncTask

android:如果一个 AsyncTask 已经在运行,则阻止另一个 AsyncTask 执行