通过本地网络传输实时数据
Transferring realtime data over a local network
目前,我有一个线程不断地通过本地网络发送数据。以下是当前代码的片段:
@Override
public void run() {
while(!interrupted()) {
byte[] data = new byte[16];
int b = 0;
try {
intToByteArray(acx[0][0], data, 0);
intToByteArray(acx[0][1], data, 4);
intToByteArray(acx[1][0], data, 8);
for(int i = 0; i < btns.length; i++) {
if(btns[i] == 1)
b |= (int) Math.pow(2, i);
}
intToByteArray(b, data, 12);
//sleep(1000);
socket.send(new DatagramPacket(data, data.length, InetAddress.getByName(local), port));
} catch(InterruptedException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
但是,我不断地在 logcat 中收到 GC_FOR_ALLOC
消息,允许应用程序 运行 一段时间最终会启动路由器,然后需要被重置。是否有更好的方式通过网络发送实时信息?
GC_FOR_ALLOC
表示没有足够的可用内存来满足分配请求,因此需要进行垃圾回收!
Logcat
中的很多表示您正在执行一些占用大量内存的操作,这些操作最终将被停止。当应用程序的堆增长到允许的大小时,GC_FOR_ALLOC
将无法释放任何内存,之后 DVM
抛出 OutOfMemoryException 并停止应用程序。
你应该考虑使用Timer
来延迟操作,或者如果你与UI Thread
有一些互动然后使用handler.postDelayed(Runnable r, long delaymilisecs)
以便给DVM
足够的是时候为下一个操作分配足够的内存了。
您可以调查应用程序的 RAM 使用情况和其他泄漏的对象,查看这些官方链接
https://developer.android.com/tools/debugging/debugging-memory.html
在 Android 中还有一篇关于管理内存消耗的一般策略的文档:
目前,我有一个线程不断地通过本地网络发送数据。以下是当前代码的片段:
@Override
public void run() {
while(!interrupted()) {
byte[] data = new byte[16];
int b = 0;
try {
intToByteArray(acx[0][0], data, 0);
intToByteArray(acx[0][1], data, 4);
intToByteArray(acx[1][0], data, 8);
for(int i = 0; i < btns.length; i++) {
if(btns[i] == 1)
b |= (int) Math.pow(2, i);
}
intToByteArray(b, data, 12);
//sleep(1000);
socket.send(new DatagramPacket(data, data.length, InetAddress.getByName(local), port));
} catch(InterruptedException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
但是,我不断地在 logcat 中收到 GC_FOR_ALLOC
消息,允许应用程序 运行 一段时间最终会启动路由器,然后需要被重置。是否有更好的方式通过网络发送实时信息?
GC_FOR_ALLOC
表示没有足够的可用内存来满足分配请求,因此需要进行垃圾回收!
Logcat
中的很多表示您正在执行一些占用大量内存的操作,这些操作最终将被停止。当应用程序的堆增长到允许的大小时,GC_FOR_ALLOC
将无法释放任何内存,之后 DVM
抛出 OutOfMemoryException 并停止应用程序。
你应该考虑使用Timer
来延迟操作,或者如果你与UI Thread
有一些互动然后使用handler.postDelayed(Runnable r, long delaymilisecs)
以便给DVM
足够的是时候为下一个操作分配足够的内存了。
您可以调查应用程序的 RAM 使用情况和其他泄漏的对象,查看这些官方链接
https://developer.android.com/tools/debugging/debugging-memory.html
在 Android 中还有一篇关于管理内存消耗的一般策略的文档: