簡體   English   中英

為 Android 啟用 PJSIP 登錄強制關閉應用程序

[英]Enabling log in PJSIP for Android forces close the app

我正在基於 SWIG 示例使用 PJSIP for android 構建 SIP Softphone。

我按照示例中的描述啟用日志:

LogConfig log_cfg = epConfig.getLogConfig();
SipLogWriter logWriter = new SipLogWriter();
log_cfg.setWriter(logWriter);
log_cfg.setDecor(log_cfg.getDecor() & ~(pj_log_decoration.PJ_LOG_HAS_CR.swigValue() | pj_log_decoration.PJ_LOG_HAS_NEWLINE.swigValue()));

我的 SipLogWriter 類在哪里:

public class SipLogWriter extends LogWriter {
    @Override
    public void write(LogEntry entry) {
        Log.d(Global.TAG, "[SipLogWriter] " + entry.getMsg());
    }
}

Pjsip lib 不時停止,並帶有以下回溯:

05-04 10:32:10.534 I/DEBUG   (  281): backtrace:
05-04 10:32:10.534 I/DEBUG   (  281):     #00 pc 00037b58  /system/lib/libc.so (tgkill+12)
05-04 10:32:10.544 I/DEBUG   (  281):     #01 pc 00013fc9  /system/lib/libc.so (pthread_kill+52)
05-04 10:32:10.544 I/DEBUG   (  281):     #02 pc 00014be7  /system/lib/libc.so (raise+10)
05-04 10:32:10.544 I/DEBUG   (  281):     #03 pc 00011529  /system/lib/libc.so (__libc_android_abort+36)
05-04 10:32:10.544 I/DEBUG   (  281):     #04 pc 0000fcb4  /system/lib/libc.so (abort+4)
05-04 10:32:10.544 I/DEBUG   (  281):     #05 pc 00001259  /system/lib/libstdc++.so
05-04 10:32:10.544 I/DEBUG   (  281):     #06 pc 00000afb  /system/lib/libstdc++.so (__cxa_pure_virtual+6)
05-04 10:32:10.544 I/DEBUG   (  281):     #07 pc 0015d4e8  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (pj::Endpoint::utilLogWrite(pj::LogEntry&)+180)
05-04 10:32:10.544 I/DEBUG   (  281):     #08 pc 0015d734  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (pj::Endpoint::logFunc(int, char const*, int)+292)
05-04 10:32:10.544 I/DEBUG   (  281):     #09 pc 001a9fe0  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (log_writer+164)
05-04 10:32:10.544 I/DEBUG   (  281):     #10 pc 0034420c  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (pj_log+2324)
05-04 10:32:10.544 I/DEBUG   (  281):     #11 pc 0034436c  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (pj_log_4+44)
05-04 10:32:10.544 I/DEBUG   (  281):     #12 pc 0025c9c4  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (play_cb+568)
05-04 10:32:10.544 I/DEBUG   (  281):     #13 pc 0029c454  /data/app/com.sample.app-1/lib/arm/libpjsua2.so (bqPlayerCallback+420)
05-04 10:32:10.544 I/DEBUG   (  281):     #14 pc 00008daf  /system/lib/libwilhelm.so
05-04 10:32:10.544 I/DEBUG   (  281):     #15 pc 000559fd  /system/lib/libmedia.so (android::AudioTrack::processAudioBuffer()+1156)
05-04 10:32:10.544 I/DEBUG   (  281):     #16 pc 00055c69  /system/lib/libmedia.so (android::AudioTrack::AudioTrackThread::threadLoop()+168)
05-04 10:32:10.544 I/DEBUG   (  281):     #17 pc 0000ef55  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+112)
05-04 10:32:10.544 I/DEBUG   (  281):     #18 pc 0000eac5  /system/lib/libutils.so
05-04 10:32:10.544 I/DEBUG   (  281):     #19 pc 000137b3  /system/lib/libc.so (__pthread_start(void*)+30)
05-04 10:32:10.544 I/DEBUG   (  281):     #20 pc 00011893  /system/lib/libc.so (__start_thread+6)

我懷疑它試圖從錯誤的線程中寫入日志,但我不知道如何修復它。 禁用 LogWriter 應用程序不會引發此錯誤。

任何幫助表示贊賞。

我遇到過同樣的問題。 我現在不知道它是否真實,但我按照官方文檔中的建議解決了。 哪里注意它是垃圾收集問題:

class MyApp {
    private MyLogWriter logWriter;

    public void init()
    {
        /* Maintain reference to log writer to avoid premature cleanup by GC */
        logWriter = new MyLogWriter();
        epConfig.getLogConfig.setWriter(logWriter);
    }
}

正如 GensaGames 所說,你需要維護一個引用,否則當 GC 決定清理對象時它會崩潰。 如果您使用依賴項注入器(例如:dagger 2),您可以將自定義 logwriter 類添加到您的圖形依賴項並將范圍設置為 Singleton 或您的應用程序范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM