【发布时间】:2011-04-04 06:02:03
【问题描述】:
我已经阅读了有关该主题的fewposts,。这是我的策略;我有一个绘图应用程序,它在 ListView 中显示用户创建的绘图。一旦用户选择了一个绘图,就会启动 DrawingEdit Activity,在 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 加载速度很快,几乎没有延迟。但是,对于非常非常复杂的图纸,延迟可能长达两秒。为了帮助解决这个问题,我尝试了一个 AsyncTask,它适用于 5% 的过大绘图,但对于另外 95% 的绘图来说似乎有点过大,实际上由于必须触发而使加载速度变慢启动异步任务。这不是最糟糕的解决方案,但我正在寻找替代方案。
现在,除了我存储在数据库中的绘图数据之外,我还有一个可以使用的静态 PNG 版本的绘图...所以我想使用的解决方案是行:
- 在 onCreate() 开始时加载一个临时的“启动”屏幕视图,使用静态绘图作为占位符,用户可以在加载绘图时立即查看。
- 开始有时昂贵的
loadDrawing()例程。 - 完成后切换视图并使用包含来自
loadDrawing()的形状的完全交互式绘图画布显示辅助视图。
我的问题是,如果我将上述解决方案大致建模如下,则永远不会显示“splash”布局,并且在loadDrawing() 完成然后显示最终布局之前仍然存在相同的延迟。关于这里发生了什么的任何信息?我是否应该将 loadDrawing() 移动到 onResume 以便在触发 loadDrawing() 之前有机会加载初始启动 UI?
@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);
}
}
【问题讨论】: