Android-skin-support
Android-skin-support copied to clipboard
Android-skin-support is an easy dynamic skin framework to use for Android, Only one line of code to integrate it. Android 换肤框架, 极低的学习成本, 极好的用户体验. "一行"代码就可以实现换肤, 你值得拥...
```Kotlin @Composable private fun ComposeUIImageItem( imgResId: Int, contentDescription: String, imgWidth: Dp = 56.dp, imgHeight: Dp = 90.dp ) { AndroidView( factory = { context -> SkinCompatImageView(context).apply { setImageResource(imgResId) setContentDescription(contentDescription) }...
compileSdkVersion 33 gradle-7.5-bin implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1'
xml预览无法
java.lang.NoClassDefFoundError: Could not initialize class skin.support.content.res.SkinCompatUserThemeManager at skin.support.content.res.SkinCompatVectorResources.getSkinDrawableCompat(SkinCompatVectorResources.java:62) at skin.support.content.res.SkinCompatVectorResources.getDrawableCompat(SkinCompatVectorResources.java:89) at skin.support.widget.SkinCompatBackgroundHelper.applySkin(SkinCompatBackgroundHelper.java:50) at skin.support.widget.SkinCompatBackgroundHelper.loadFromAttributes(SkinCompatBackgroundHelper.java:35) at skin.support.widget.SkinCompatTextView.(SkinCompatTextView.java:27) at com.aliex.ex.view.BaseTextView.(BaseTextView.kt:19) at com.aliex.ex.view.BaseTextView.(BaseTextView.kt:14) at com.aliex.ex.view.BaseTextView.(BaseTextView.kt) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at...
用来十多个 3秒左右级才能打开 改成 TextView 秒开
SkinCompatDelegate中的mSkinHelpers使用虚引用持有所有支持换肤的view,虽然view会随着页面关闭自动回收,但是对应被mSkinHelpers 这个列表持有的 WeakReference 对象本身貌似不会被回收,会一直存在 mSkinHelpers 列表中,不断的 onCreateView 貌似会使 mSkinHelpers 列表不断增长。所以这里每次 add 对象到 mSkinHelpers 列表的时候是否需要添加清理掉列表中被回收的对象的逻辑?或者换肤遍历列表的时候清理无用对象?或者调整这里的逻辑,不使用列表来持有可换肤view对象,而是构造view的时候使用 addOnAttachStateChangeListener,在 onViewAttachedToWindow 里面注册换肤监听,onViewDetachedFromWindow 反注册换肤监听?
接入了这个框架,线上有一些ANR ,这个有的优化吗
2024-04-21 17:22:57.982 22608-22644/com.qiang.skintest E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.qiang.skintest, PID: 22608 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$AsyncFutureTask.done(AsyncTask.java:426) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at...