繁体   English   中英

Android:在加载其他View内容时将图像闪烁到屏幕

[英]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版本...因此,我要使用的解决方案是:

  1. 使用静态图形作为占位符,在onCreate()的开头加载临时的“初始”屏幕视图,用户可以在加载图形时立即对其进行查看。
  2. 启动有时昂贵的loadDrawing()例程。
  3. 完成后,切换视图并显示具有完全交互式绘图画布的辅助视图,其中包括来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM