Android-App耗费大量精力。套接字可能是原因

时间:2013-04-01 09:33:11

标签: java android multithreading sockets energy

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

创建新套接字需要花费很多精力:

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

如果我不再需要它,请关闭serversocket和其他套接字。

连接成本能源吗?

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

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

我也有几个主题:

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

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

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++;
     }

第3个主题:通过互联网的http请求将数据发送到服务器。

其中一个线程需要多少能量吗?

即使关闭wifi或打开wifi但未连接到wlan,该应用程序也需要很多能量。 所以没有联系。

这种选择中有哪些是耗能的?我该怎么做才能减少能量呢?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

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

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

FYI开放许多插座并不会耗费能源。网络活动需要花费一点精力(注意idle timers!),但它不应该让你的设备的一部分真的很热。