在我的应用程序中,我使用一个datagramSocket,一个serverocket和几个套接字。当我的应用程序在我的android设备上运行时,手机在一个区域变热,并且需要大量能量。
我认为问题的原因是我的套接字。但是我不确定哪种操作会耗费大量能量:

创建新的Socket是否花费很多精力:

Socket so = new Socket();
ss = new ServerSocket( port );
mSocket = new MulticastSocket( port );

如果我不再需要它,是否可以导入并关闭serversocket和其他套接字。

连接会消耗能量吗?
so.connect( new InetSocketAddress(ip, port ), 1000);

连接后是否需要很多能量?(当我长时间不发送数据时断开连接是否更好)
大量的 socket 是否需要大量能量?

我也有几个线程:

除了主线程和三个绑定(bind)线程之外,我还有三个:

第一个线程:在我的数据报套接字上监听传入的消息:
DatagramPacket packet = new DatagramPacket(buffer, buffer. length);
mSocket .receive(packet);

第二个线程:在多个套接字上监听传入的消息:
try {
      if (objectInputStreamList .size() != 0){
            if (counter >= objectInputStreamList .size()){
                 counter = 0;
             }
             ObjectInputStream ois = objectInputStreamList .get(counter);
             Object o = ois.readObject();
             if (o instanceof Message){
                 receive((Message) o);
             System.out .println("Message received in Server");
                 }
             }
     } catch (SocketTimeoutException soTOE){
        counter++;
     }

第三线程:通过互联网通过http请求将数据发送到服务器。

一根线需要很多能量吗?

即使关闭了wifi或打开了wifi但未连接到wlan,该应用程序也需要大量能量。
因此,没有任何连接。

哪些操作消耗能量?我该怎么做以减少能量呢?

谢谢您的回答。

最佳答案

考虑到即使不执行任何操作,它也很热,我怀疑您的线程之一正在自由运行,而不是适本地阻塞。没有完整的源代码无法告诉您更多信息,但是一些不错的旧printf调试可能会派上用场。只需在每个while循环中放入不同的日志记录语句,然后运行程序即可。如果一条语句以惊人的速度填满了您的日志,那么您就已经拥有了。

是的,您应该始终关闭不再需要的套接字。例如,如果不关闭服务器套接字,则它们的端口将保持占用状态。最终,系统将用尽端口。 (我可能会提出许多其他原因,包括资源使用和优雅程度。整理内容甚至可能使问题变得很明显。)

供许多人打开的FYI本身并不消耗能源。网络 Activity 会消耗一点能量(请注意idle timers!),但它不应使设备的某个部分真正发烫。

10-01 02:13