android应用程序消耗太多能量.socket可能是原因



在我的应用程序中,我使用一个datagramSocket,一个serversocket和几个socket。当我的应用程序在我的安卓设备上运行时,手机在一个区域发热,需要大量的能量。我认为问题的原因是我的插座。但我不确定哪些操作如此耗能:

创建新的套接字会消耗很多能量吗:

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

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

连接需要能源吗?

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

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

我也有几个线程:

除了主线程和三个绑定线程,我还有三个:

第一个线程:监听我的数据报上的传入消息:

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循环中放入不同的日志记录语句,然后运行程序。如果一条语句以惊人的速度填满您的日志,那么您就知道了。

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

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

相关内容

  • 没有找到相关文章

最新更新