Socket导致cpu消耗10%以上

1.接手的项目apk中基于JT808协议用Socket上传位置等消息,用命令top -m 10 -s cpu

查看cpu消耗时发现此app占用cpu超过10%

先把GPS停了,重新运行还是会很耗cpu

2.定位

用Android Profiler查了下点record

Socket导致cpu消耗10%以上_第1张图片

最终定位到
线程里SocketChannel里的read方法

 while (true) {

                try {
                    int len = 0;
                    len = channel.read(readbuffer);

                    //Log.i(TAG, "channel.read len == " + len);

                    if ( len > 0 && handler != null) {

发现是死循环里不断read

于是在read读不到也就是返回-1里,做了短暂延时,问题解决.

你可能感兴趣的:(Socket导致cpu消耗10%以上)