Java 通过本地网络传输实时数据
目前,我有一个线程不断地通过本地网络发送数据。下面是当前代码的一个片段:Java 通过本地网络传输实时数据,java,android,memory-management,Java,Android,Memory Management,目前,我有一个线程不断地通过本地网络发送数据。下面是当前代码的一个片段: @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],
@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();
}
}
}
@覆盖
公开募捐{
而(!interrupted()){
字节[]数据=新字节[16];
int b=0;
试一试{
intToByteArray(acx[0][0],数据,0);
intToByteArray(acx[0][1],数据,4);
intToByteArray(acx[1][0],数据,8);
对于(int i=0;i
然而,我在logcat中不断地收到
GC\u FOR\u ALLOC
消息,允许应用程序运行一段时间最终会启动路由器,然后需要重置路由器。是否有更好的方法通过网络发送实时信息?GC\u FOR\u ALLOC
意味着没有足够的可用内存来满足分配请求,因此需要进行垃圾收集
在Logcat
中的许多操作意味着您正在执行一些内存开销大的操作,这些操作最终将被停止。当应用程序的堆增长到允许的最大值时,GC\u FOR\u ALLOC
将无法释放任何内存,然后DVM
抛出OfMemoryException并停止应用程序
你应该考虑使用<代码>定时器< /代码>来延迟操作,或者如果你与“代码> UI线程< /代码>有交互作用,然后使用<代码>处理程序。PistPro(RunnRead,LelayDelayMiSeCs) >以给出<代码> DVM < /代码>足够的时间为下一次操作分配足够的内存。
您可以调查应用程序的RAM使用情况和其他泄漏对象,查看这些官方链接 还有一个关于Android中管理内存消耗的一般策略的文档:是的,使用
服务
,但如果你想通过网络不断发送实时数据,那么无论你做什么,android操作系统迟早都会决定重置它,如果需要的话memory@Sharpedge谢谢你的快速回复!我一定会调查服务的。