在 Activity 中加载巨大的 XML 布局,当 activity 在前面时设备锁定和解锁时导致冻结?
Loading huge XML layout in Activity, causing freeze when device locked and unlocked when activity is in front?
我已经加载了一个巨大的布局 XML(> 1600 行),它有一个带有多个布局的视图翻转器。它首先冻结在 'onCreate',但我更改了代码以在后台膨胀布局并将返回的视图传递给 'setContentView' 在 'onPostExecute'。 (这工作正常)
现在,当 activity 打开(在前面)并且设备被锁定(或屏幕关闭)时,当我尝试解锁设备时,它在某些设备上完全冻结,并且其他设备它显示一个对话框说 "App isn't responding. Do you want to close it?" 选项 "Wait" 和 "Ok".
请帮我解决这个问题。
谢谢
终于明白是什么问题了。
我在 AsyncTask
中使用 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);
}
事实证明,当我们使用视图对象设置内容视图时,它会在 activity 暂停时冻结设备(我不确定为什么)。
但是当我使用 setContentView(R.layout.my_large_xml)
方法时,它工作得很好。所以我放弃了在后台加载 XML 的想法,现在我以常规方式在我的主线程上执行它,因为我们不能从另一个线程调用 setContentView
。
伤心!这不是我想要的样子,因为它会在最初调用 setContentView
时冻结应用程序,但至少它现在可以正常工作。 :(
我不会放弃,会继续努力。而且,如果我找到更好的解决方案,我会更新答案。 :)
我已经加载了一个巨大的布局 XML(> 1600 行),它有一个带有多个布局的视图翻转器。它首先冻结在 'onCreate',但我更改了代码以在后台膨胀布局并将返回的视图传递给 'setContentView' 在 'onPostExecute'。 (这工作正常)
现在,当 activity 打开(在前面)并且设备被锁定(或屏幕关闭)时,当我尝试解锁设备时,它在某些设备上完全冻结,并且其他设备它显示一个对话框说 "App isn't responding. Do you want to close it?" 选项 "Wait" 和 "Ok".
请帮我解决这个问题。
谢谢
终于明白是什么问题了。
我在 AsyncTask
中使用 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);
}
事实证明,当我们使用视图对象设置内容视图时,它会在 activity 暂停时冻结设备(我不确定为什么)。
但是当我使用 setContentView(R.layout.my_large_xml)
方法时,它工作得很好。所以我放弃了在后台加载 XML 的想法,现在我以常规方式在我的主线程上执行它,因为我们不能从另一个线程调用 setContentView
。
伤心!这不是我想要的样子,因为它会在最初调用 setContentView
时冻结应用程序,但至少它现在可以正常工作。 :(
我不会放弃,会继续努力。而且,如果我找到更好的解决方案,我会更新答案。 :)