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

iecba09b  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(320)

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

  1. @Override
  2. public void run() {
  3. while(!interrupted()) {
  4. byte[] data = new byte[16];
  5. int b = 0;
  6. try {
  7. intToByteArray(acx[0][0], data, 0);
  8. intToByteArray(acx[0][1], data, 4);
  9. intToByteArray(acx[1][0], data, 8);
  10. for(int i = 0; i < btns.length; i++) {
  11. if(btns[i] == 1)
  12. b |= (int) Math.pow(2, i);
  13. }
  14. intToByteArray(b, data, 12);
  15. //sleep(1000);
  16. socket.send(new DatagramPacket(data, data.length, InetAddress.getByName(local), port));
  17. } catch(InterruptedException e) {
  18. e.printStackTrace();
  19. } catch(Exception e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }

然而,我不断地 GC_FOR_ALLOC logcat中的消息,并允许应用程序运行一段时间,最终将启动路由器,然后需要重置。有没有更好的方法通过网络发送实时信息?

4bbkushb

4bbkushb1#

GC_FOR_ALLOC 意味着没有足够的可用内存来完成分配请求,因此需要进行垃圾收集!
有很多人 Logcat 意味着您正在执行一些内存开销很大的操作,这些操作最终将被停止。当应用程序的堆增长到允许的最大值时 GC_FOR_ALLOC 无法释放任何内存,之后 DVM 抛出outofmemoryexception并停止应用程序。
你应该考虑使用 Timer 延迟操作,或者如果您与 UI Thread 然后使用 handler.postDelayed(Runnable r, long delaymilisecs) 以便 DVM 足够的时间为下一个操作分配足够的内存。
你可以调查你的应用程序的内存使用情况和其他泄漏的对象,看看这些官方链接
https://developer.android.com/tools/debugging/debugging-memory.html
还有一个关于android内存消耗管理的一般策略的文档:
http://developer.android.com/training/articles/memory.html

相关问题