在我的应用程序中,我使用了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,该应用程序也需要很多能量。 所以没有联系。
这种选择中有哪些是耗能的?我该怎么做才能减少能量呢?
感谢您的回答。
答案 0 :(得分:0)
鉴于即使它不应该做任何事情它也会运行热,我怀疑你的一个线程是自由运行而不是正确阻塞。没有完整的源代码就无法告诉你更多信息,但是一些好的旧版printf调试可能会派上用场。只需在每个while循环中放入不同的日志记录语句并运行该程序。如果一个语句以惊人的速度填满你的日志,那么你就拥有它。
是的,您应该始终关闭不再需要的套接字。例如,如果不关闭服务器套接字,则其端口将保持占用状态。最终系统将耗尽端口。 (我可以提出许多其他原因,包括资源使用和优雅。整理一些事情甚至可能会使问题变得明显。)
FYI开放许多插座并不会耗费能源。网络活动需要花费一点精力(注意idle timers!),但它不应该让你的设备的一部分真的很热。