Android PrintedPdfDocument多页PDF couse致命信号11(SIGSEGV)

时间:2015-03-24 11:35:28

标签: android sigsegv

我正在尝试在Android上创建多页PDF文件。 这是我的代码中导致问题的一部分:

    document.finishPage(page);
    // new page
    pageNumber++;
    page = document.startPage(pageNumber-1);
    Canvas canvas = page.getCanvas();
    // draw new page

如果删除此代码,一切正常,但我的PDF文档的所有内容都在一页上 我使用的是Nexus 7. Android SKD = 19(Android版本4.4.4)。
这是我不时随机出现的错误:


03-24 09:09:52.183      177-177/? I/DEBUG﹕ *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
 ...
03-24 09:09:52.283      177-177/? I/DEBUG﹕ backtrace:
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #00  pc 00077226  /system/lib/libandroid_runtime.so
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #01  pc 0007738f  /system/lib/libandroid_runtime.so
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #02  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #03  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #04  pc 00026fe0  /system/lib/libdvm.so
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #05  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #06  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #07  pc 0006057d  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #08  pc 000605a1  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #09  pc 00055287  /system/lib/libdvm.so
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #10  pc 0000d170  /system/lib/libc.so (__thread_entry+72)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ #11  pc 0000d308  /system/lib/libc.so (pthread_create+240)
03-24 09:09:52.283      177-177/? I/DEBUG﹕ stack:

我使用ndk-stack检查这一行,但我没有看到任何有用的东西:


********** Crash dump: **********
Build fingerprint: 'google/razor/flo:4.4.4/KTU84P/1227136:user/release-keys'
pid: 28425, tid: 28466, name: pool-1-thread-2  
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000000e8
Stack frame #00  pc 00077226  /system/lib/libandroid_runtime.so: Routine ??
??:0
Stack frame #01  pc 0007738f  /system/lib/libandroid_runtime.so: Routine ??
??:0
Stack frame #02  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112): Routine ??
??:0
Stack frame #03  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398): Routine ??
??:0
Stack frame #04  pc 00026fe0  /system/lib/libdvm.so: Routine ??
??:0
Stack frame #05  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76): Routine ??
??:0
Stack frame #06  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184): Routine ??
??:0
Stack frame #07  pc 0006057d  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336): Routine ??
??:0
Stack frame #08  pc 000605a1  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20): Routine ??
??:0
Stack frame #09  pc 00055287  /system/lib/libdvm.so: Routine ??
??:0
Stack frame #10  pc 0000d170  /system/lib/libc.so (__thread_entry+72): Routine ??
??:0
Stack frame #11  pc 0000d308  /system/lib/libc.so (pthread_create+240): Routine ??
??:0

我试图创建空的白页文档。同样的问题 知道我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

如果使用canvas.drawBitmap()方法,请不要忘记将位图设置为可变。它可能会解决您的问题。

bitmap_page = bitmap_page.copy(bitmap_page.getConfig(), true);

答案 1 :(得分:0)

经过大量测试。使用BitmapDrawable而不是Bitmap解决了这个问题。我总是使用bitmap.recycle(),但不知何故BitmapDawable在低级别的内存回收方面效果更好,我不知道为什么。

我希望这会对某人有所帮助。