2

在我的应用程序中,我使用了一个数据报套接字、一个服务器套接字和几个套接字。当我的应用程序在我的 android 设备上运行时,手机会在某个区域发热,并且需要大量能量。我认为问题的原因是我的套接字。但我不确定哪种操作如此耗能:

创建新的 Sockets 是否需要花费很多精力:

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

如果我不再需要它,关闭服务器套接字和其他套接字是否重要。

连接会消耗能源吗?

so.connect( new InetSocketAddress(ip, port ), 1000);

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

我也有几个线程:

除了我的主线程和三个 binderthreads,我还有三个:

第一个线程:在我的数据报套接字上侦听传入消息:

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,该应用程序也需要大量能量。所以没有任何联系。

这些操作中哪些是耗能的?我能做些什么来减少能量?

谢谢您的回答。

4

1 回答 1

0

鉴于即使它不应该做任何事情也会运行很热,我怀疑您的一个线程正在自由运行而不是正确阻塞。如果没有完整的源代码,无法告诉您更多信息,但一些好的旧 printf 调试可能会派上用场。只需在每个 while 循环中放置不同的日志记录语句并运行程序。如果一个语句以惊人的速度填满你的日志,那么你就有了。

是的,您应该始终关闭不再需要的套接字。例如,如果您不关闭服务器套接字,那么它们的端口将保持被占用。最终系统将耗尽端口。(我可以想出许多其他原因,包括资源使用和优雅。整理东西甚至可能使问题变得明显。)

仅供参考,打开许多插座本身并不会消耗能源。网络活动会消耗一些能量(注意空闲计时器!),但它不应该使您的设备的一部分变得非常热。

于 2013-10-18T21:41:50.557 回答