Этот класс имеет исправление в методе setWebViewLayerTypeHardware. Если удалить установку исправления в onResume, где установлен слой ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, а затем через 1000 мс устанавливается ОБОРУДОВАНИЕ, то при возвращении на экран этого класса отображается содержимое веб-просмотра. Он начинает мерцать. Как это исправить без задержки в 1000 мс? Если сразу изменить, исправление не исчезнет. Я пробовал те же решения с doOnLayout, preDraw, Choreographer — тоже не помогло. И мне приходится использовать именно АППАРАТНЫЙ слой
private val isWebViewClearFixEnabled
get() = features?.getWebViewClearFix()?.isFeatureAvailable() == true
private val isFixEnabled
get() = features.hasFeatureEnabled()
class CatalogFragment : BaseFragment() {
private var catalogDelegate: CatalogDelegate? = null
private var needsGpuReset = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
catalogDelegate = ctalogDelegate(
shouldCloseOnFinish = arguments?.getBoolean(KEY_CLOSE_ON_FINISH) ?: false,
closeCatalog = { close() }
)
catalogDelegate?.restoreState(savedInstanceState)
catalogDelegate?.onCreate(requireActivity())
initMiniAppHandlers()
}
override fun onResume() {
super.onResume()
setWebViewLayerTypeHardware()
}
override fun onPause() {
super.onPause()
setWebViewLayerTypeSoftware()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
giftsCatalogDelegate?.saveState(outState)
}
override fun onDestroy() {
catalogDelegate?.onDestroy(requireContext())
super.onDestroy()
}
private fun setWebViewLayerTypeSoftware() {
if (isFixEnabled) {
val webView = browser?.state?.view
webView?.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
needsGpuReset = true
}
}
private fun setWebViewLayerTypeHardware() {
if (isFixEnabled && needsGpuReset) {
needsGpuReset = false
val webView = browser?.state?.view ?: return
webView?.postDelayed({
webView?.setLayerType(View.LAYER_TYPE_HARDWARE, null)
}, 1000) // for weak devices, there is enough delay of 200 ms, for fast devices, it turned out empirically that it takes about 1000 ms.
}
}
// other code
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... flickering