在我的应用程序中,我使用一个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!),但它不应使设备的某个部分真正发烫。