美文网首页
华为 & pthread_create & OOM

华为 & pthread_create & OOM

作者: 南窗云 | 来源:发表于2019-03-26 14:55 被阅读0次

描述

项目中图书馆功能需要下载大量资源到本地设备,以节省流量。
文件不大,但是数量巨多!
封装完下载类后,出现了一个机型适配的问题,没想到是华为!

下载到一定数量文件后,会莫名其妙的停止下载,再次点击下载还会闪退!

通过查日志发现 OOM ,百思不得解

java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory

详细报错

2019-03-26 14:12:31.608 28699-30821/com.***.*** E/AndroidRuntime: FATAL EXCEPTION: Thread-362
    Process: com.***,***, PID: 28699
    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.ensurePrestart(ThreadPoolExecutor.java:1611)
        at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:342)
        at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:562)
        at java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:654)
        at okhttp3.internal.http2.Http2Connection$ReaderRunnable.applyAndAckSettings(Http2Connection.java:738)
        at okhttp3.internal.http2.Http2Connection$ReaderRunnable.settings(Http2Connection.java:710)
        at okhttp3.internal.http2.Http2Reader.readSettings(Http2Reader.java:289)
        at okhttp3.internal.http2.Http2Reader.nextFrame(Http2Reader.java:141)
        at okhttp3.internal.http2.Http2Reader.readConnectionPreface(Http2Reader.java:80)
        at okhttp3.internal.http2.Http2Connection$ReaderRunnable.execute(Http2Connection.java:607)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.lang.Thread.run(Thread.java:784)
2019-03-26 14:12:31.618 744-2650/? E/iMonitor: FaultDetect: DUMPTOOL_PRINTF return.
2019-03-26 14:12:31.619 744-2650/? E/iMonitor: FaultDetect: DUMPTOOL_PRINTF return.
2019-03-26 14:12:31.619 744-2650/? E/iMonitor: FaultDetect: DUMPTOOL_PRINTF return.
2019-03-26 14:12:31.619 744-2650/? E/iMonitor: FaultDetect: DUMPTOOL_PRINTF return.

解决

通过查询资料 《栈内存溢出: java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory》,发现是华为手机限制了线程的最大创建数量,而我这边下载处理时,OkHttpClient() 的创建也没有采用单例。

解决方案
OkHttpClient() 的创建采用单例,即可解决。

        /**
         * 开始下载文件
         */
        fun load(params: Array<out String>) {
            if (!NetworkUtil.isNetConnect(activity)) {
                callback?.error(code = -2, msg = "网络错误,请重试~")
                return
            }
            /**
             * 改为 单例,否则个别华为手机 会 OOM
             */
//            val httpClient = OkHttpClient()
            call = httpClient.newCall(Request.Builder().url(params[0]).get().build())

注释掉每次下载都 OkHttpClient() 的代码,改为单例,就解决了。

    /**
     * 单例下载
     */
    companion object {
        val httpClient = OkHttpClient()
    }

相关文章

  • 华为 & pthread_create & OOM

    描述 项目中图书馆功能需要下载大量资源到本地设备,以节省流量。文件不大,但是数量巨多!封装完下载类后,出现了一个机...

  • pthread_create & OOM

    上报主要是华为手机占比较高。这个不好找,不过在日志里频繁看到一个log上报的日志,所以猜测可能是日志上报过于频繁,...

  • pthread_create failed: couldn't

    启动线程OOM有两种情况 case 1: pthread_create failed: couldn't allo...

  • 经典 OOM 问题|pthread_create

    作者:FeelsChaotic 一、背景 近期版本上线后收到不少用户反馈(大多是华为用户)崩溃,日志上总体表现为 ...

  • 经典 OOM 问题|pthread_create

    一、背景 近期版本上线后收到不少用户反馈(大多是华为用户)崩溃,日志上总体表现为 pthread_create (...

  • 线程

    通过pthread_create()函数创建新线程。 #include int pthread_create( p...

  • 多线程pthread_create的参数

    多线程编程 C语言使用pthread_create()函数完成多线程的创建,pthread_create()函数共...

  • 多线程编程API

    创建线程和结束线程 1. pthread_create创建一个线程的函数是pthread_create,定义如下:...

  • pthread_create ——我与华为线程的争斗

    首发于公众号: DSGtalk1989 好久不见,值此年终之际,跟大家探讨一下,一个诡异的内存溢出。 羁绊与猜想 ...

  • 华为手机6.0线程OOM分析

    Link在华为手机上有一些很高的Crash,原因是RxJava调用不当导致的。 一.问题描述 Link有大量因为O...

网友评论

      本文标题:华为 & pthread_create & OOM

      本文链接:https://www.haomeiwen.com/subject/klmgvqtx.html