尝试显示位图时,一目了然的应用程序小部件图像崩溃

2024-03-16

当我尝试在应用程序中显示位图图像(我的应用程序图标)时,它工作正常,但当我尝试在 Widget Glance 中显示它时崩溃。

这是我的位图代码:

    val icon = packageManager.getApplicationIcon("com.myapp.packagename")
    val bitmap: Bitmap = try {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            getAppIconV26(applicationContext, "com.myapp.packagename")
        } else {
            (icon as BitmapDrawable).bitmap
        }
    } catch (e: Exception) {
        (ResourcesCompat.getDrawable(applicationContext.resources, R.drawable.placeholder, null) as BitmapDrawable).bitmap

这是jetpack compose Image,它可以很好地加载位图:

androidx.compose.foundation.Image(
    modifier = Modifier.size(46.dp), 
    bitmap = bitmap.asImageBitmap(),
    contentDescription = null),
}

但是当我尝试使用 Jetpack Glance Image 在小部件中加载相同的位图时,小部件崩溃了:

androidx.glance.Image(
    modifier = GlanceModifier.size(46.dp),
    provider = ImageProvider(bitmap),
    contentDescription = null,
)

Crash:

E/GlanceAppWidget: Error in Glance App Widget
    java.lang.RuntimeException: Tried to marshall a Parcel that contained Binder objects.
        at android.os.Parcel.nativeMarshall(Native Method)
        at android.os.Parcel.marshall(Parcel.java:620)
        at androidx.core.widget.RemoteViewsCompatService$RemoteViewsCompatServiceData$Companion.serializeToBytes$core_remoteviews_release(RemoteViewsCompatService.kt:245)
        at androidx.core.widget.RemoteViewsCompatService$RemoteViewsCompatServiceData$Companion.create(RemoteViewsCompatService.kt:166)
        at androidx.core.widget.RemoteViewsCompatService$Companion.saveItems(RemoteViewsCompatService.kt:306)
        at androidx.core.widget.RemoteViewsCompat.setRemoteAdapter(RemoteViewsCompat.kt:86)
        at androidx.glance.appwidget.translators.LazyListTranslatorKt.translateEmittableLazyList(LazyListTranslator.kt:90)
        at androidx.glance.appwidget.translators.LazyListTranslatorKt.translateEmittableLazyColumn(LazyListTranslator.kt:45)
        at androidx.glance.appwidget.RemoteViewsTranslatorKt.translateChild(RemoteViewsTranslator.kt:143)
        at androidx.glance.appwidget.RemoteViewsTranslatorKt.setChildren(RemoteViewsTranslator.kt:335)
        at androidx.glance.appwidget.RemoteViewsTranslatorKt.translateEmittableColumn(RemoteViewsTranslator.kt:268)
        at androidx.glance.appwidget.RemoteViewsTranslatorKt.translateChild(RemoteViewsTranslator.kt:140)
        at androidx.glance.appwidget.RemoteViewsTranslatorKt.translateComposition(RemoteViewsTranslator.kt:96)
        at androidx.glance.appwidget.RemoteViewsTranslatorKt.translateComposition-mU3eQPI(RemoteViewsTranslator.kt:63)
        at androidx.glance.appwidget.GlanceAppWidget$composeForSize$2.invokeSuspend(GlanceAppWidget.kt:393)
        at androidx.glance.appwidget.GlanceAppWidget$composeForSize$2.invoke(Unknown Source:8)
        at androidx.glance.appwidget.GlanceAppWidget$composeForSize$2.invoke(Unknown Source:4)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
        at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
        at androidx.glance.appwidget.GlanceAppWidget.composeForSize-AAqiGWc$glance_appwidget_release(GlanceAppWidget.kt:371)
        at androidx.glance.appwidget.GlanceAppWidget.compose$glance_appwidget_release(GlanceAppWidget.kt:218)
        at androidx.glance.appwidget.GlanceAppWidget.compose$glance_appwidget_release(GlanceAppWidget.kt:201)
        at androidx.glance.appwidget.GlanceAppWidget$compose$1.invokeSuspend(Unknown Source:19)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

我不明白这次崩溃。有人可以帮我理解出了什么问题吗?


Glance 会转化为实际的 RemoteView。然后将它们传递给主机进程(即启动器/主屏幕)。可在进程之间传递的对象的大小存在限制。

看来您正在使用显示许多位图的 LazyColumn(因此是 ListView)。您可能达到了该大小限制。

有几件事值得尝试:

  • Try displaying just one with the same code
    • 有效吗?
    • 如果再传一个小Bitmap还可以吗?也许问题在于位图大小或类型?
  • 或者尝试使用 URI 而不是位图或限制要显示的项目数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试显示位图时,一目了然的应用程序小部件图像崩溃 的相关文章

随机推荐

  • 停止 Unicorn 服务器进程运行的最佳方法是什么?

    停止 Unicorn 服务器进程运行的最佳方法是什么 每当我尝试使用它来阻止它时kill p 90234这是行不通的 这很可能是我做错了 Thanks 看看独角兽信号页面 http unicorn bogomips org SIGNALS
  • 配置 org.hibernate.SQL 记录器时,Logback 显示 DEBUG 输出,根目录位于 INFO 级别

    为什么 logback 允许通过设置为 INFO 级别的根记录器进行 DEBUG 输出 上下文是一个使用 Hibernate 的 spring boot starter 项目 在版本 1 2 0 中 POM 命名为 logback clas
  • 带有动态Where子句的Android rawquery

    我正在尝试在 Android 中执行 SQL 查询 如下所示 SELECT FROM Flashcards WHERE category Anatomy OR category Surgery AND difficulty Easy OR
  • 在 Xamarin Android 中访问 UI 线程

    我的应用程序发送和接收 TCP 字符串 这些字符串之一是根据该字符串使对象可见 我当前的代码给出System NullReferenceException has been thrown Object reference not set t
  • jQuery Datatable:标题和搜索在同一行

    目前我的 jQuery 数据表如下所示 我希望历史标题和搜索栏位于同一行 我已经实现了标题和表格 如下所示 h2 History h2 table class table style width 100 thead tr tr thead
  • 如何在我的控制器中使用 Spring HttpRequest?

    我这样设置了测试 SpringBootTest AutoConfigureMockMvc RunWith SpringRunner class public class PublicControllerTest Autowired priv
  • 创建文件夹中每个文件内容的索引

    我正在用Python 制作一个搜索工具 其目标是能够按内容搜索文件 我们主要谈论源文件 文本文件 而不是图像 二进制文件 即使在元数据中搜索将是一个很大的改进 目前我不使用正则表达式 随意的纯文本 这部分算法效果很好 问题是我意识到我主要在
  • 为经典 asp 站点启用日志记录

    我继承了一个经典的 ASP 项目并将其部署在 IIS 7 5 上 我可以访问该网站 但在某些时候我会收到通用 500 错误页面 我想知道发生了什么 所以我认为最好是查看日志 在 c WINDOWS system32 LogFiles 和 c
  • 当RID在SQL Server中遇到相同行时汇总数量

    我尝试了几种选择 但未能得到我想要显示的确切答案 我希望从这里得到想法 以下是我选择进入后的最后温度 RID LOTID SAVID QTY A1278 G926 87 A1278 1 Y976 D958 G 108 A1278 T898
  • 如何在 Django 中为用户创建注册表单

    Django 创建用户的方式是什么 我不是在谈论超级用户 只是一个简单的用户表单和创建帐户 Django 文档很好地涵盖了身份验证主题 并且 Django 本身附带了用于登录 注销 密码更改和重置的视图 对于注册 您必须创建自己的视图 如下
  • 将聊天服务器实现为 WebService

    我有一个学校项目 我必须在其中实现一个聊天应用程序 其服务器将是一个 java web 服务 问题是 我一直认为 Web 服务是调用远程功能的一种方式 而且我不知道如何在 Web 服务上保持 会话 活动 也不知道如何跟踪当前处于活动状态的所
  • 在 URL 中发送参数的最佳且安全的方法

    我正在开发一个网站 该网站具有根据 id 更新和删除数据的功能 现在我担心的是我的网址是 www example com public controller action 1 如果行动是delete 任何人都可以change id from
  • 如何处理 Nimbus Look and Feel 中的派生颜色?

    我想要的是使不可编辑的文本区域的背景与其禁用的背景相同 我知道该颜色可以从UIManager用钥匙TextArea disabled DerivedColor color 214 217 223 parent control offsets
  • 是否可以使用引用键在 Rmarkdown 文档中间插入文章的完整参考文献?

    Here http rmarkdown rstudio com authoring bibliographies and citations html我学习如何在文本中间插入引文并在文档末尾生成完整的参考书目 我想知道是否可以使用引用键得到
  • iText 中的 PdfPageEventHelper

    我正在创建一个 pdf 其中每个 pdf 页面的标题将根据当前页码进行自定义 例如 在第一页中 标题是 第一页 在第二页中 标题是 第二页 依此类推 我们现在要做的是将标题添加到 PdfPTable 中 然后我们还将许多其他内容添加到 Pd
  • UIAlertView按钮操作代码

    有谁知道如何对按钮进行操作UIAlertview 如果是这样 请指导我 void alertView UIAlertView alertView didDismissWithButtonIndex NSInteger buttonIndex
  • iframe加载时间限制使用javascript

    我需要在 5000 毫秒后停止加载我的 iframe 页面 我正在使用这些 但它每 5000 毫秒刷新一次 iframe 这是什么问题 请修复它 谢谢
  • PendingIntent 上的“requestCode”有何用途?

    背景 我通过 AlarmManager 使用 PendingIntent 来发出警报 问题 起初我认为为了取消以前的请求 我必须提供我之前用来启动警报的确切请求代码 但后来我发现我错了 因为取消API http developer andr
  • 如何将 pandas 安装到 Visual Studio Code 中?

    我想读取 Excel CSV 文件 经过研究 我意识到我需要import pandas as pd 有没有办法将其安装到 Visual Studio Code 中 我试过打字import pandas as pd 但显示一条红线 我对Pyt
  • 尝试显示位图时,一目了然的应用程序小部件图像崩溃

    当我尝试在应用程序中显示位图图像 我的应用程序图标 时 它工作正常 但当我尝试在 Widget Glance 中显示它时崩溃 这是我的位图代码 val icon packageManager getApplicationIcon com m