片段 UI 在事务中冻结,但在从片段返回堆栈中恢复相同片段时工作顺利
Fragment UI freezing on transaction, but works smoothly on reverting same fragment from fragment back stack
我有一个 activity
,我一次显示单个 fragment
,总共有三个不同的片段。
FirstFragment
和 SecondFragment
包含 RecyclerView
和 ThirdFragment
有一个 ScrollView
.
问题是在运行时附加片段时,UI 冻结,但自定义 OnItemClickListener
侦听器工作正常。当我 select FirstFragment
的任何列表项时,它重定向到 SecondFragment
,这是另一个列表视图。 SecondFragment
也冻结了。但是,如果我使用后退按钮返回,FirstFragment
可以正常工作。同样,当我 select SecondFragment
列表项时,我会重定向到最后一个,即 ThirdFragment
这是一个滚动视图,它也会被冻结,如果我回到 SecondFragment
它开始顺利工作,但是如果我再次返回 FirstFragment
和 select 任何列表项并再次来到 SecondFragment
UI 冻结。
注意: 此问题仅出现在 OS 版本 5.0(棒棒糖及更高版本)上 4.2.2 Jelly Bean 一切正常。 android OS 版本 5.0 上支持库的 TextInputLayout
动画也存在相同的冻结问题,但在 4.2.2 Jelly 上运行良好豆子
我创建了一个 Gist of activity
,三个分别是 fragments
、RecyclerView.Adapter
和自定义 OnItemClickListener
ProductActivity.java, ProductCategoryFragment.java, ProductListFragment.java, ProductDetailFragment.java, ItemClickSupport.java
如有任何帮助,我们将不胜感激。谢谢
编辑
在 activity
启动时,我得到以下日志。
04-01 16:28:47.241 32176-32176/com.example.omkar D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-01 16:28:47.371 32176-32176/com.example.omkar I/Timeline: Timeline: Activity_launch_request id:com.example.omkar time:77715999
04-01 16:28:47.381 32176-32176/com.example.omkar W/ResourcesManager: getTopLevelResources: com.example.omkar for user 0
04-01 16:28:47.391 32176-32176/com.example.omkar W/ResourcesManager: getTopLevelResources: com.example.omkar for user 0
04-01 16:28:47.401 32176-32176/com.example.omkar D/PhoneWindow: *FMB* installDecor mIsFloating : false
04-01 16:28:47.401 32176-32176/com.example.omkar D/PhoneWindow: *FMB* installDecor flags : -2139029248
04-01 16:28:47.431 32176-32176/com.example.omkar D/Activity: performCreate Call Injection manager
04-01 16:28:47.431 32176-32176/com.example.omkar I/InjectionManager: dispatchOnViewCreated > Target : com.example.omkar.userInterface.activity.product.ProductActivity isFragment :false
04-01 16:28:47.431 32176-32176/com.example.omkar D/DisplayManager: DisplayManager()
04-01 16:28:47.461 32176-32176/com.example.omkar D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
04-01 16:28:47.461 32176-32176/com.example.omkar D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
04-01 16:28:47.491 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.501 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.511 32176-32176/com.example.omkar I/InjectionManager: dispatchCreateOptionsMenu :com.example.omkar.userInterface.activity.product.ProductActivity
04-01 16:28:47.511 32176-32176/com.example.omkar I/InjectionManager: dispatchPrepareOptionsMenu :com.example.omkar.userInterface.activity.product.ProductActivity
04-01 16:28:47.531 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.561 32176-32176/com.example.omkar I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@1d12fb86 time:77716194
04-01 16:28:47.921 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.961 32176-32191/com.example.omkar I/art: Background sticky concurrent mark sweep GC freed 32383(1734KB) AllocSpace objects, 7(112KB) LOS objects, 9% free, 16MB/18MB, paused 5.876ms total 38.048ms
问题已解决。这是因为我在 AndroidManifest.xml
文件中提到了 android:hardwareAccelerated="false"
。
答案位于:
我有一个 activity
,我一次显示单个 fragment
,总共有三个不同的片段。
FirstFragment
和 SecondFragment
包含 RecyclerView
和 ThirdFragment
有一个 ScrollView
.
问题是在运行时附加片段时,UI 冻结,但自定义 OnItemClickListener
侦听器工作正常。当我 select FirstFragment
的任何列表项时,它重定向到 SecondFragment
,这是另一个列表视图。 SecondFragment
也冻结了。但是,如果我使用后退按钮返回,FirstFragment
可以正常工作。同样,当我 select SecondFragment
列表项时,我会重定向到最后一个,即 ThirdFragment
这是一个滚动视图,它也会被冻结,如果我回到 SecondFragment
它开始顺利工作,但是如果我再次返回 FirstFragment
和 select 任何列表项并再次来到 SecondFragment
UI 冻结。
注意: 此问题仅出现在 OS 版本 5.0(棒棒糖及更高版本)上 4.2.2 Jelly Bean 一切正常。 android OS 版本 5.0 上支持库的 TextInputLayout
动画也存在相同的冻结问题,但在 4.2.2 Jelly 上运行良好豆子
我创建了一个 Gist of activity
,三个分别是 fragments
、RecyclerView.Adapter
和自定义 OnItemClickListener
ProductActivity.java, ProductCategoryFragment.java, ProductListFragment.java, ProductDetailFragment.java, ItemClickSupport.java
如有任何帮助,我们将不胜感激。谢谢
编辑
在 activity
启动时,我得到以下日志。
04-01 16:28:47.241 32176-32176/com.example.omkar D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
04-01 16:28:47.371 32176-32176/com.example.omkar I/Timeline: Timeline: Activity_launch_request id:com.example.omkar time:77715999
04-01 16:28:47.381 32176-32176/com.example.omkar W/ResourcesManager: getTopLevelResources: com.example.omkar for user 0
04-01 16:28:47.391 32176-32176/com.example.omkar W/ResourcesManager: getTopLevelResources: com.example.omkar for user 0
04-01 16:28:47.401 32176-32176/com.example.omkar D/PhoneWindow: *FMB* installDecor mIsFloating : false
04-01 16:28:47.401 32176-32176/com.example.omkar D/PhoneWindow: *FMB* installDecor flags : -2139029248
04-01 16:28:47.431 32176-32176/com.example.omkar D/Activity: performCreate Call Injection manager
04-01 16:28:47.431 32176-32176/com.example.omkar I/InjectionManager: dispatchOnViewCreated > Target : com.example.omkar.userInterface.activity.product.ProductActivity isFragment :false
04-01 16:28:47.431 32176-32176/com.example.omkar D/DisplayManager: DisplayManager()
04-01 16:28:47.461 32176-32176/com.example.omkar D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
04-01 16:28:47.461 32176-32176/com.example.omkar D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
04-01 16:28:47.491 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.501 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.511 32176-32176/com.example.omkar I/InjectionManager: dispatchCreateOptionsMenu :com.example.omkar.userInterface.activity.product.ProductActivity
04-01 16:28:47.511 32176-32176/com.example.omkar I/InjectionManager: dispatchPrepareOptionsMenu :com.example.omkar.userInterface.activity.product.ProductActivity
04-01 16:28:47.531 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.561 32176-32176/com.example.omkar I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@1d12fb86 time:77716194
04-01 16:28:47.921 32176-32176/com.example.omkar W/View: View too large to fit into drawing cache, needs 10563840 bytes, only 3686400 available
04-01 16:28:47.961 32176-32191/com.example.omkar I/art: Background sticky concurrent mark sweep GC freed 32383(1734KB) AllocSpace objects, 7(112KB) LOS objects, 9% free, 16MB/18MB, paused 5.876ms total 38.048ms
问题已解决。这是因为我在 AndroidManifest.xml
文件中提到了 android:hardwareAccelerated="false"
。
答案位于: