首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用RxJava和播放服务视觉时的致命信号11 (SIGSEGV)

使用RxJava和播放服务视觉时的致命信号11 (SIGSEGV)
EN

Stack Overflow用户
提问于 2017-09-06 13:50:27
回答 1查看 1K关注 0票数 3

在我的应用程序中,我使用了图片中person位置的定义。然后,使用RxJava I处理生成的图像并输出结果。在完成这个过程之后。它们都在三星、华为、meizu等设备上工作得很好( android版本5.0及更高版本)。但在小米(无论是什么版本的android)上,我得到了这个错误:

A/libc:错误块0xabc 932a8的无效地址或地址传递给dlfree A/libc:致命信号11 (SIGSEGV),代码2,tid 28493 ( RxNewThreadSche ) A/DEBUG中的故障地址0xdelbaad( pid: 28376,tid: 28493,名称:RxNewThreadSche >>> com.package.name <<< )

有时它在启动后崩溃,有时运行5-6次。但它总是迫使我完成我的申请。我不能把我所有的代码都放在这里,但我认为这是因为:

代码语言:javascript
运行
复制
FaceDetector.release();

因为当我不使用这一行时,我的应用程序就会崩溃,只是不能工作FaceDetector (在其他设备上使用)。

崩溃后,小米产生了错误。

编辑

代码语言:javascript
运行
复制
private static FaceDetector sFaceDetector;
private static FaceDetectorUtil sFaceDetectorUtil;
private static WeakReference<Context> mContext;

public static void init(Context context) {
    if (sFaceDetectorUtil == null) {
        sFaceDetectorUtil = new FaceDetectorUtil(context);
    }
}

private FaceDetectorUtil(Context context) {
    mContext = new WeakReference<>(context);
}

public static FaceDetector getDetector() {
    if (sFaceDetector != null) {
        sFaceDetector.release();
    }
    return sFaceDetector = new FaceDetector.Builder(mContext.get())
            .setTrackingEnabled(false)
            .setLandmarkType(FaceDetector.ALL_LANDMARKS)
            .setMode(FaceDetector.FAST_MODE)
            .build();
}

编辑2

getFaceDetector方法中的当前线程:

P9 lite

计数: 13

线程: HeapTaskDaemon

线程: FinalizerDaemon

线程: RxComputationThreadPool-2

线程:池1-线程-1

线程: GoogleApiHandler

线程: RxComputationThreadPool-1

线程: JavaCPP分配器

线程: ReferenceQueueDaemon

线程: FinalizerWatchdogDaemon

线程: RxCachedWorkerPoolEvictor-1

线程: RxComputationThreadPool-3

线程: RxNewThreadScheduler-17

线程:池-2-线程-1

小米红米4x

计数: 22

线程:信号捕捉器

线程: RxComputationThreadPool-2

线程: Binder:5858_3

线程: Binder:5858_2

线程: hwuiTask1

线程: RxComputationThreadPool-1

线程: JDWP

线程: FinalizerWatchdogDaemon

线程: RenderThread

线程: RxCachedWorkerPoolEvictor-1

线程: RxComputationThreadPool-3

线程: ReferenceQueueDaemon

线程: Binder:5858_1

线程:池1-线程-1

线程: JavaCPP分配器

线程: HeapTaskDaemon

螺纹:主

线程: GoogleApiHandler

线程: FinalizerDaemon

线程: RxNewThreadScheduler-4

线程: hwuiTask2

线程:池-2-线程-1

如果有人能帮我,我会很感激的。致以问候!

EN

回答 1

Stack Overflow用户

发布于 2017-09-06 14:51:56

错误不是由RxJava引起的。它是由本机代码引起的,可能是由库libmobile_vision_face.so引起的。

如果无法更改本机代码,则可以避免调用FaceDetector.release()并只初始化一次(例如,在Application类中),从而解决错误。

UPD:用于单例方法的,我打算使用它如下:

代码语言:javascript
运行
复制
public static FaceDetector getDetector() {
    if (sFaceDetector != null) {
        return sFaceDetector;
    } else {
        return sFaceDetector = new FaceDetector.Builder(mContext.get())
            .setTrackingEnabled(false)
            .setLandmarkType(FaceDetector.ALL_LANDMARKS)
            .setMode(FaceDetector.FAST_MODE)
            .build();
    }
}

此外,您还可以尝试首先将同步添加到您的方法中,以防您试图并行调用它(可能导致错误的原因):

代码语言:javascript
运行
复制
public static synchronized FaceDetector getDetector() {
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46077045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档