实在没招了,希望各位大神能帮帮我
android开发吧
全部回复
仅看楼主
level 1
是这样的,我用socket和单片机通信,在每次发送一次数据之后(因为数据要实时刷新,所以我每500ms发送一次数据),都开了一个接收线程,然后在接收线程里使用inputStream.read(RX_Buff)来接收数据,我在接收线程里做了println来打印线程运行情况,我发现每次接收到数据之后线程都运行完了(也就是run方法执行完了),按理来说线程就应该结束了,可是我发现只要我多发几次数据,就会因为内存溢出导致程序崩溃,实在是不明白,明明每次线程都结束了,为什么还会这样,程序很小,线程就几个(我不知道定时器算不算线程,如果算,一共就4个线程而已,一个主线程,2个定时器线程,然后就是接收线程).
然后我又试了不重复开接收线程,我打算启动线程的时候把循环标志位置1,结束界面的时候置0,在一个接收线程里一直while循环,但是我发现程序还是会因为内存溢出导致崩溃。。。。实在是想不通为什么了。。。求教各位大神帮我分析一下。
这是我的错误信息
这是我的接收线程
2018年01月16日 12点01分 1
level 1
我就发现这个线程的名字越来越大。。。。一脸懵逼。。。
然后我目前想到的解决办法是,不使用接收线程,直接就在发送之后写inputStream.read(RX_Buff)来接收数据,用定时器来判超时,如果在一段时间之后还没接收到数据,那么关闭该inputStream。
或者使用线程池,但是我还没学。。不知道怎么用,我看介绍说是几个线程也没必要用线程池吧,而且我也不知道线程池是否能解决我这个问题。。
2018年01月16日 12点01分 2
看5楼,问题找出来了
2018年01月16日 13点01分
@勇气之翼🔥 4楼,说错了
2018年01月16日 13点01分
level 7
socket 关了没有?
2018年01月16日 12点01分 3
没有关,我要长时间通信,不能关呀
2018年01月16日 12点01分
刚刚做了个测试,屏蔽线程里的语句,就不会崩了,基本可以确定不是线程的问题,应该是我在线程里使用handler发消息给主线程导致的,难道发消息之后主线程接收了消息之后还要清除消息吗?
2018年01月16日 13点01分
level 1
大概确定了,是因为频繁调用适配器的notifyDataSetChanged()方法导致崩溃,可是我需要用这个方法来刷新listview,怎么做才能不崩溃呢?
2018年01月16日 13点01分 4
1