有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过本地网络传输实时数据

目前,我有一个线程不断地通过本地网络发送数据。下面是当前代码的一个片段:

@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消息,允许应用程序运行一段时间最终会启动路由器,然后需要重置路由器。有没有更好的方法通过网络发送实时信息


共 (1) 个答案

  1. # 1 楼答案

    GC_FOR_ALLOC意味着没有足够的可用内存来完成分配请求,因此需要进行垃圾收集

    Logcat中的许多操作意味着您正在执行一些内存开销大的操作,这些操作最终将被停止。当应用程序的堆增长到允许的大小时,GC_FOR_ALLOC将无法释放任何内存,然后DVM抛出OutOfMemoryException并停止应用程序

    您应该考虑使用^ {< CD5>}来延迟操作,或者如果您与^ {CD6>}有一些交互,那么使用^ {< CD7>},以便给^ {< CD4}}足够的时间来分配足够的内存用于下一个操作。

    你可以调查你的应用程序的内存使用情况和其他泄漏对象,查看这些官方链接

    https://developer.android.com/tools/debugging/debugging-memory.html

    还有一篇关于管理Android内存消耗的一般策略的文档:

    http://developer.android.com/training/articles/memory.html