首先看一下错误信息如下

java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory
    at java.lang.Thread.nativeCreate(Native Method)
    at java.lang.Thread.start(Thread.java:753)
    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:970)
    at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1038)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1180)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:784)
线程创建太多,有代码不合理的地方,如果不确是否线程创建过多可以通过Android studio的Profiler

然后选择CPU可以看见如下

上图的55个线程是不会造成oom    也很好的去模拟,每次请求都new一个新的线程就会增加,如果一直增加不减就会导致oom  此时内存还是属于正常;此时大家内心是不是想说  这个还用你讲,我肯定知道线程创建过多了,怎么去排查代码呢,不急 定位是线程过多,那么我们就需要去验证,不然改了代码还不知道是不是改对了,拿着用户去做实验是不可取的;

 

存在多次创建线程问题:

1.timer用的时间 每次都new  ,原来的没有释放 。(项目中service 中每次都new Timer ,资源浪费 )

2.OKHttpClient 有多个  需要使用单利的方式,不能创建多个请求,每次都创建一个将会是开启多个线程池就达不到复用的效果。

3.频繁创建线程的地方没有用线程池 。

4.项目中 有一个单次定位的 每次都new AMapClient 进行单次定位 , 定位完成没有掉 stopLocation() ,而且定位还在service 

5.Rxjava 线程使用尽量不需要每次创建线程 不然没有限制最大线程数讲无限创建;
 

 

 

 

更多相关文章

  1. Android中使用Handler机制更新UI的两种方法
  2. Android(安卓)Handler解析和相关问题
  3. android字体闪烁动画(线程)
  4. Android消息处理机制4——Looper
  5. google 开发者自定义view的系列(创建view,绘制,交互,view的优化)
  6. 【Android】SQLite使用
  7. Android之SurfaceView学习
  8. Android(安卓)小代码集
  9. 多线程实现更新android进度条。

随机推荐

  1. android 创建桌面快捷方式,4.0系统可用
  2. 选Android培训机构,为什么选蜂窝Android培
  3. Android 获取截图 并将其保存到本地sd在
  4. 默认进入桌面不锁屏
  5. android Activity相关笔记
  6. webView以及seeKbar的使用
  7. android jni研究
  8. Android 关于屏幕截图
  9. android 弹出层,窗口
  10. 第一章 工欲善其事 必先利其器—Android(