Android 在“活动”中加载巨大的XML布局,当“活动”在前面时设备被锁定和解锁时导致冻结?
我加载了一个巨大的布局XML>1600行,其中有一个具有多个布局的视图翻转器。它最初是在“onCreate”时冻结的,但我改为在后台放大布局的代码,并将返回的视图传递给“onPostExecute”处的“setContentView”。这很好用 现在,当活动处于打开状态且设备锁定或屏幕关闭时,当我尝试解锁设备时,在某些设备上它会完全冻结,而在其他设备上它会显示一个对话框,说明应用程序没有响应。你想关闭它吗?具有等待和确定选项 请帮我解决这个问题Android 在“活动”中加载巨大的XML布局,当“活动”在前面时设备被锁定和解锁时导致冻结?,android,android-activity,android-xml,activity-lifecycle,Android,Android Activity,Android Xml,Activity Lifecycle,我加载了一个巨大的布局XML>1600行,其中有一个具有多个布局的视图翻转器。它最初是在“onCreate”时冻结的,但我改为在后台放大布局的代码,并将返回的视图传递给“onPostExecute”处的“setContentView”。这很好用 现在,当活动处于打开状态且设备锁定或屏幕关闭时,当我尝试解锁设备时,在某些设备上它会完全冻结,而在其他设备上它会显示一个对话框,说明应用程序没有响应。你想关闭它吗?具有等待和确定选项 请帮我解决这个问题 谢谢我终于明白了,是什么引起了麻烦 我在一个异步任
谢谢我终于明白了,是什么引起了麻烦 我在一个异步任务中使用LayoutInflater将整个XML膨胀成一个视图,如下所示
@Override
protected View doInBackground(Void... params) {
Looper.prepare();
View view = getLayoutInflater().inflate(R.layout.my_large_xml, null, false);
return view;
}
@Override
protected void onPostExecute(Void result)
{
setContentView(view);
}
事实证明,当我们使用view对象设置内容视图时,当活动暂停时,它会冻结设备。我不知道为什么。
但是当我使用setContentViewR.layout.my_large_xml方法时,它工作得非常好。所以我放弃了在后台加载XML的想法,现在我用传统的方式在主线程上加载,因为我们不能从另一个线程调用setContentView
悲哀!这不是我想要的,因为最初调用setContentView时它会冻结应用程序,但至少现在它可以工作了
我不会放弃,继续努力。如果我找到更好的解决方案,我会更新答案: 它真的应该是一个巨大的布局XML,而不是像带ViewPager的FragmentStatePagerAdapter这样的东西吗?它会因为您的网络操作而导致问题。您的异步任务可能已冻结。它看起来像是在“onPause”冻结。有什么我能做的吗?我现在无法将布局更改为使用ViewPager。我甚至不知道这是否会有帮助。如果traceview太难运行,请优化您的xml布局,我无法相信有人可以编写1600多行长的monster布局xml文件…如果它看起来像在“onPause”冻结,onPause会是什么样子?