【问题标题】:Setting BitmapDrawable tileMode makes the app restart设置 BitmapDrawable tileMode 使应用重新启动
【发布时间】:2016-08-31 02:25:33
【问题描述】:

虽然在大多数设备上我的应用程序运行良好,但在某些设备上(到目前为止,LG G3、三星 Galaxy S6)我遇到了一个奇怪的错误,我无法真正展开:

tileMode(通过XML 或以编程方式)设置为BitmapDrawable 上的任何内容(clamp/mirror),即布局的背景,使背景完全变黑-,并且应用程序在大约 20 秒后重新启动 - 没有任何出现问题的迹象(LogCat 中没有消息,我的活动的这些回调都没有被调用:onPause()onStop()onDestroy())。

由于这些冻结/崩溃之间存在一些不一致,具体取决于所使用的Bitmap,我开始使用.png 图像,并发现我可以摆脱(大部分)这些崩溃,如果我减小这些图像的尺寸 (

自从

  • 仍有一些崩溃和

  • 我无法确定所有设备的大小阈值

我仍在寻找一个通用的解决方案,也许你们中的一些人可以帮助我。

【问题讨论】:

  • 对于那些更大的 png (>200x200) 如果你不使用 tileMode 会发生什么?
  • 那么一切都很好,只是图片被拉伸到了布局的大小。
  • 然后使用android:gravity
  • 我没有提到,但是我使用了重复的图像,所以我会用一个在两个方向重复的较小图像覆盖整个背景,而不是改变布局的大小。我认为android:gravity 不适合这个。所以我确实需要设置tileMode
  • 所以如果 std BitmapDrawable 不适合您使用自定义 ShapeDrawable.ShaderFactory 测试 ShapeDrawable

标签: android android-drawable android-bitmap bitmapdrawable


【解决方案1】:

虽然this 线程与我遇到的问题不完全相同,但它意外地帮助了我。将相关布局的layerType 设置为software 就像

  • android:layerType="software",或

  • view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

使黑色背景和应用重新启动消失。

事实证明,缩小背景图像并不能解决问题,只会减少它出现的频率。

无论如何感谢 pskink 的帮助!

【讨论】:

  • 我现在非常爱你。过去 5 天,每天 4 个多小时,我一直在尝试诊断和解决这个问题。我正要永远退出 android 开发(不是开玩笑)。当我读到你的 OP 时,我的胸口真的是激动得要爆炸了——这与我遇到的完全相同的问题,据我所知,android:layerType="software" 已经完全解决了这个问题。 Link to my issue。我只是想让你知道这对我有多大帮助。
  • 我知道你在说什么! :D 有同样的努力解决这个问题,也几乎放弃了;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2022-08-16
  • 2023-03-21
  • 2018-08-18
相关资源
最近更新 更多