[英]Android: Flashing image to screen while other View content is loading
我已经阅读了有关该主题的几篇 文章 。 这是我的策略; 我有一个绘图应用程序,可以在ListView中显示用户创建的绘图。 用户选择绘图后,将启动DrawingEdit活动,并将绘图加载到onCreate中,大致如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout for the activity
setContentView(R.layout.drawing_view);
// do potentially expensive loading of drawing here
loadDrawing();
}
loadDrawing()
从数据库加载用户图形的各个形状。 现在,对于95%的工程图和“典型”用例,此方法都可以正常工作,因为Activity加载很快,几乎没有延迟。 但是,对于非常复杂的图形,延迟可能长达2秒。 为了帮助解决此问题,我尝试了一个AsyncTask,它对于5%的过大图纸非常有效,但对于另外95%的图纸来说似乎过头了,实际上由于不得不开火,加载速度稍慢AsyncTask。 这不是最糟糕的解决方案,但我正在寻找替代方案。
现在,除了我存储在数据库中的图形数据之外,我还可以使用图形的静态PNG版本...因此,我要使用的解决方案是:
loadDrawing()
例程。 loadDrawing()
的形状。 我的问题是,如果我大致按如下所示对上述解决方案进行建模,则“ splash”布局将永远不会显示,并且在loadDrawing()
完成并显示最终布局之前仍然存在相同的延迟。 关于这里发生的事情的任何信息? 我应该将loadDrawing()
移到onResume上,以便在启动loadDrawing()
之前有机会加载初始启动界面吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout for the activity
setContentView(R.layout.splash_view);
// do potentially expensive loading of drawing here
if (loadDrawing()) {
// set the layout for the activity
setContentView(R.layout.drawing_view);
}
}
如果loadDrawing是您Activity中的一个方法,它将阻塞UI线程直到完成。 简而言之,直到完成启动步骤(创建/启动/继续)后,才会显示UI。 是否将loadDrawing放在onResume中并不重要,因为它仍然会阻止UI的创建。
您需要使用某种后台异步线程来使其正常工作-这就是为什么AsyncTask有助于在需要同时进行其他操作的同时绘制/操作UI的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.