Mau*_*ker 19 svg android fresco android-glide
我正在创建一个应用程序,它应该显示一些图像Fragment,其中大部分是从互联网上下载的.
我正在使用Glide来处理我在我的CardViews上的图像加载和我的图像滑块上的Fresco(这个问题在SO上解释了我为什么使用两个图像库).
的lib的壁画部分主要是基于这个叉子的AndroidImageSlider.
重要提示:我正在尝试加载的图像可以是PNG或SVG.
更多信息:我正在使用运行Android 5.0.2 的Moto Maxx(国际版Droid Turbo).也发生在运行Android 4.4.2(cyanogen mod)的三星Galaxy S4上,但它的发生频率要低得多.
PS:我没有使用NDK.
有时,我的应用程序只是崩溃,无处不在,甚至没有任何用户交互.当它发生时,我在logcat上收到以下错误消息:
Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894
Run Code Online (Sandbox Code Playgroud)
全栈:
04-07 07:59:08.110 21894 21894 F libc : Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894 (asus.saitestore)
04-07 07:59:08.161 21946 21946 E Diag_Lib: Diag_LSM_Init: Failed to open handle to diag driver, error = 2
04-07 07:59:08.263 333 333 I DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-07 07:59:08.263 333 333 I DEBUG : Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys'
04-07 07:59:08.263 333 333 I DEBUG : Revision: 'p4a0'
04-07 07:59:08.263 333 333 I DEBUG : ABI: 'arm'
04-07 07:59:08.263 333 333 I DEBUG : pid: 21894, tid: 21894, name: asus.saitestore >>> org.unasus.saitestore <<<
04-07 07:59:08.264 333 333 I DEBUG : signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 0x9a74c060
04-07 07:59:08.446 333 333 I DEBUG : r0 00000000 r1 bead50cc r2 00000000 r3 9dae4000
04-07 07:59:08.446 333 333 I DEBUG : r4 9dae4000 r5 9a74c060 r6 bead50d4 r7 00000001
04-07 07:59:08.446 333 333 I DEBUG : r8 00063054 r9 00000000 sl 000000fe fp 00000000
04-07 07:59:08.446 333 333 I DEBUG : ip 00000000 sp bead5094 lr b5952d63 pc b5a38426 cpsr 800b0030
04-07 07:59:08.447 333 333 I DEBUG :
04-07 07:59:08.447 333 333 I DEBUG : backtrace:
04-07 07:59:08.447 333 333 I DEBUG : #00 pc 001b2426 /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
04-07 07:59:08.447 333 333 I DEBUG : #01 pc 000ccd61 /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
04-07 07:59:08.447 333 333 I DEBUG : #02 pc 000d6cff /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
04-07 07:59:08.447 333 333 I DEBUG : #03 pc 001076c1 /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #04 pc 0010782d /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #05 pc 001078b9 /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #06 pc 00107cf3 /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
04-07 07:59:08.447 333 333 I DEBUG : #07 pc 0010804b /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
04-07 07:59:08.447 333 333 I DEBUG : #08 pc 000e2031 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
04-07 07:59:08.447 333 333 I DEBUG : #09 pc 000e3513 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
04-07 07:59:08.447 333 333 I DEBUG : #10 pc 000db7c5 /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #11 pc 000db8ad /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
04-07 07:59:08.447 333 333 I DEBUG : #12 pc 000f97bb /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
04-07 07:59:08.447 333 333 I DEBUG : #13 pc 000b54c7 /system/framework/arm/boot.oat
04-07 07:59:09.190 333 333 I DEBUG : Tombstone written to: /data/tombstones/tombstone_08
04-07 07:59:09.205 806 828 I BootReceiver: Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE)
Run Code Online (Sandbox Code Playgroud)
有一次,它也给了我一个不同的错误信息:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052
Run Code Online (Sandbox Code Playgroud)
完整的堆栈:
04-04 15:41:34.059: A/libc(30052): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052 (asus.saitestore)
04-04 15:41:34.161: I/DEBUG(28994): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-04 15:41:34.161: I/DEBUG(28994): Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys'
04-04 15:41:34.161: I/DEBUG(28994): Revision: 'p4a0'
04-04 15:41:34.161: I/DEBUG(28994): ABI: 'arm'
04-04 15:41:34.161: I/DEBUG(28994): pid: 30052, tid: 30052, name: asus.saitestore >>> org.unasus.saitestore <<<
04-04 15:41:34.161: I/DEBUG(28994): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x9abe300c
04-04 15:41:34.177: I/DEBUG(28994): r0 00000000 r1 bede70a4 r2 00000000 r3 9ce89000
04-04 15:41:34.178: I/DEBUG(28994): r4 9ce89000 r5 9abe300c r6 bede70ac r7 00000001
04-04 15:41:34.178: I/DEBUG(28994): r8 00000000 r9 00000000 sl 000000fe fp 00000000
04-04 15:41:34.178: I/DEBUG(28994): ip 00000000 sp bede706c lr b5992d63 pc b5a78426 cpsr 800b0030
04-04 15:41:34.178: I/DEBUG(28994): backtrace:
04-04 15:41:34.178: I/DEBUG(28994): #00 pc 001b2426 /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
04-04 15:41:34.178: I/DEBUG(28994): #01 pc 000ccd61 /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
04-04 15:41:34.178: I/DEBUG(28994): #02 pc 000d6cff /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
04-04 15:41:34.178: I/DEBUG(28994): #03 pc 0010721d /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #04 pc 00107669 /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #05 pc 0010782d /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #06 pc 001078b9 /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #07 pc 00107cf3 /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
04-04 15:41:34.179: I/DEBUG(28994): #08 pc 0010804b /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
04-04 15:41:34.179: I/DEBUG(28994): #09 pc 000e2031 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
04-04 15:41:34.179: I/DEBUG(28994): #10 pc 000e3513 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
04-04 15:41:34.179: I/DEBUG(28994): #11 pc 000db7c5 /system/lib/libskia.so
04-04 15:41:34.179: I/DEBUG(28994): #12 pc 000db8ad /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
04-04 15:41:34.179: I/DEBUG(28994): #13 pc 000f97bb /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
04-04 15:41:34.179: I/DEBUG(28994): #14 pc 000b54c7 /system/framework/arm/boot.oat
04-04 15:41:34.820: I/DEBUG(28994): Tombstone written to: /data/tombstones/tombstone_07
04-04 15:41:34.821: I/BootReceiver(1989): Copying /data/tombstones/tombstone_07 to DropBox (SYSTEM_TOMBSTONE)
Run Code Online (Sandbox Code Playgroud)
编辑:也发生在三星Galaxy S4,墓碑可以在这里找到.
在我的内部CardAdapter,我正在加载这样的图像(SVG部分是从这里获取的):
if (mod.getImg_type() == ImageTypes.SVG) {
GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder;
SVGDecoder decoder = new SVGDecoder(PreserveAspectRatio.STRETCH);
requestBuilder = Glide.with(mContext)
.using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<>(decoder))
.decoder(decoder)
.placeholder(R.drawable.modulo)
.error(R.drawable.banner_error)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<Uri>());
requestBuilder
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.load(Uri.parse(mod.getUrl_icon()))
.into(cardHolder.iv_card);
}
else {
Glide.with(mContext)
.load(mod.getUrl_icon())
.placeholder(R.drawable.modulo)
.error(R.drawable.banner_error)
.centerCrop()
.crossFade()
.into(cardHolder.iv_card);
}
Run Code Online (Sandbox Code Playgroud)
而XML文件看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="@dimen/card_w"
android:layout_height="@dimen/card_h"
android:layout_margin="5dp"
android:stateListAnimator="@anim/raise"
card_view:cardCornerRadius="0dp"
android:foreground="?android:attr/selectableItemBackground">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/rl_card">
<ImageView
android:layout_width="@dimen/card_image_w"
android:layout_height="@dimen/card_image_h"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
android:id="@+id/iv_card"
android:src="@drawable/modulo"
android:layout_margin="@dimen/spacing_medium" />
<TextView
android:id="@+id/tv_card"
android:layout_width="@dimen/card_text_w"
android:layout_height="@dimen/card_text_h"
android:maxHeight="@dimen/card_text_h"
android:maxWidth="@dimen/card_text_w"
android:layout_below="@+id/iv_card"
android:layout_centerHorizontal="true"
android:ellipsize="end"
android:maxLines="1"
android:singleLine="true"
android:text="Bacon ipsum dolor amet duis short ribs nostrud esse tempor."
android:textSize="12sp"
android:gravity="center_horizontal"
android:layout_marginLeft="@dimen/spacing_medium"
android:layout_marginRight="@dimen/spacing_medium" />
<View
android:id="@+id/card_check"
android:layout_width="match_parent"
android:layout_height="@dimen/card_check_h"
android:maxHeight="@dimen/card_check_h"
android:layout_below="@+id/tv_card"
android:background="@color/primary_light"
android:layout_alignParentBottom="true" />
</RelativeLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
我在这里找到了几个问题,但是没有一个问题对我的问题有帮助.重现它有点困难.有时,即使在故障屏幕上30分钟后,应用程序也不会崩溃.另一方面,它发生在图像显示之后.
我发现的一些问题:
还有很多人......
这是应用程序的截图,取自我手机生成的错误报告:
我在某些地方看到这个问题可能与内存不足有关.但我认为这不太可能,因为我的手机有3GB或RAM,而且我加载的图像比本机图库应用程序(没有在手机上崩溃)更少.
另一方面,skia问题跟踪器上的线程表明它与SVG lib有关.
更新:我发现这个链接在Android问题跟踪,和这一次的Skia的问题跟踪,这是最有可能涉及到的问题.
其他更新:我删除了滑块,应用程序停止崩溃.我猜问题就在那里.
还有另一个更新:我已经将滑块更改为仅加载PNG或仅SVG在给定时间内加载.应用程序仅在加载SVG图像时崩溃.所以问题可能出在SVG lib上.
从文件加载SVG也会崩溃.
我真的没有解决方案,但我相信我有一些有用的提示可以帮助您进一步挖掘问题,但评论很长
您已经缩小了问题范围。问题很可能出在部分或全部 SVG 上。
因此,我将重点确定是否所有 SVG 或其中某些 SVG 都导致了该问题。
浏览您提到的“SVG lib”代码,它看起来没有任何本机组件,所以我不会责怪它。
检查回溯很明显,崩溃发生在“Skia”本机库(libskia.so)上。
在你的回溯中人类可读的部分发布:
/system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
/system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
/system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
/system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
/system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
/system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
/system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
/system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
/system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
Run Code Online (Sandbox Code Playgroud)
Backtrace 是从上到下读取的,因此我发布的第一行正是崩溃的地方。霓虹灯上没有过滤器的一些不透明的东西。(NEON位于处理器芯片上,设备支持或不支持)
有关Skia 库的一些额外详细信息:
Skia 是一个开源 2D 图形库,提供可跨各种硬件和软件平台工作的通用 API。它充当 Google Chrome 和 Chrome OS、Android、Mozilla Firefox 和 Firefox OS 以及许多其他产品的图形引擎。
Skia 由 Google 赞助和管理,但任何人都可以根据 BSD 自由软件许可证使用。虽然核心组件的工程是由 Skia 开发团队完成的,但我们会考虑任何来源的贡献。
因此,问题很可能出在“Android 源代码”或您的测试设备使用的 ROM 上。您是否在普通 Android 上测试过该应用程序,看看它是否仍然崩溃?或者至少是没有一些自定义 ROM 的东西,因为你可能会遇到一些限制。我自己在有关霓虹灯功能的自定义 ROM 上遇到了一些限制,但在 OEM/Stock ROM 上从未遇到过。
最后但并非最不重要的一点是,将 SVG 加载到 Android 时存在一些限制,因此另一种可能性是遇到其中一个限制。谷歌搜索我发现一篇文章提到了它,但不确定它是否是唯一的一篇。
Android 开发人员参考建议将矢量图形限制为最大 200 x 200 dpi,因为矢量图形的初始加载可能相对昂贵,导致绘制时间较长。
| 归档时间: |
|
| 查看次数: |
4449 次 |
| 最近记录: |