在每个@Composable()中使用x.dp(例如1.dp)是否会导致性能问题? 因为它每次都会创建一个新对象?

@Stable
inline val Int.dp: Dp get() = Dp(value = this.toFloat())

用所有DP定义一个恒定的类是不是一种好的做法?

推荐答案

不会影响运行时性能.

Dp是柯特林inline value class.在幕后,它只是一个具有方便功能的Float,看起来像一个物体.Kotlin编译器将所有使用内联到Float值.(请注意,这将对编译时产生very次要的影响.)

在运行时没有对象创建/装箱或垃圾回收,只是将Int转换/复制到Float.(如果Int是文字,则Kotlin编译器可能会优化该转换/复制,在编译时执行Float转换.)

Dp用于调整@Composable内部的大小时,实际像素大小将通过将此Float乘以屏幕密度来计算.该乘法运算速度很快,但如果在许多地方使用生成的像素值,则可能需要存储它.(例如,如果要在Canvas中绘制)

Android相关问答推荐

如何在Android Room中使用@Relation多对一查询

Jetpack编写:通过viewModels()vs viewModel View ModernName()'

Android Bundle getSerializable(String?):'可序列化?&# 39、被抛弃了在Java中被弃用

Jetpack Compose:如何将浮动操作按钮上方的子按钮居中对齐?

try 用Jetpack Compose理解视图模型和导航

穿戴与iPhone连接的安卓操作系统

如果我的圆形图像的顶部居中于卡片内部,我如何在其下方画一条弧线?

在Jetpack Compose中实现自动换行

为什么它显示我的空白屏幕?

如何在Jetpack Compose android中使用导航

Visual Studio 2022,毛伊岛,Android Emulator:无法更改内存量

修复报错 RecyclerView: No adapter attached;跳过布局

PullRefreshIndicator 与 ScrollableTabRow 重叠

根据 Jetpack Compose 中的生命周期正确处理变量/函数

重命名列失败的房间自动迁移(NOT NULL 约束失败,生成错误的迁移类)

TextField 溢出和软包装不适用于 Compose 约束布局

WindowManager 内的 RecyclerView 不更新

Android Studio (Kotlin):无法启动活动

如何让用户与任意应用程序共享文件?

Android Java Keystore 在另一台机器上损坏