我有一个应用程序需要在开始时使用 svg-android 的变体将大量 SVG 转换为 Drawable。
我遇到的问题是转换是相当密集的处理器,所以如果我在 UI 线程上运行它,一切都会在它发生时暂停 10 秒左右。我尝试将转换移动到后台线程,但这会导致一些奇怪,因为在所有 Drawable 完成之前,依赖于 Drawable 数组的其他一些方法会触发。我尝试了几种不同的方法来制作加载动画,但是在后台进程处于活动状态时它们不会动画。
这是我的相关代码:
//get and resize SVGs
new Thread(new Runnable(){
public void run(){
for (int i=0;i<drawablesArray.length;i++){
SVG vector = SVGParser.getSVGFromResources(getResources(),resourceArray[i]);
Drawable drawable = new PictureDrawable(vector.resizePicture(height,width); //resize picture is a custom function in SVG-Android
drawablesArray[i]=drawable;
}
}
}).start();
while(drawablesArray[20]==null){
loadingView.animate().setDuration(100).rotationBy(25);
}
使用该代码,它将成功阻止后面的方法触发,直到后台进程完成,但while
循环中的动画永远不会真正播放。我也尝试过使用一个不确定ProgressBar
的加载视图,无论有没有while
循环(改变为实际上不做任何事情),它会一直动画,直到后台线程启动,此时它会冻结。
如果我将那里的动画代码从while
循环中取出,动画将在后台线程完成后触发,而不是与后台线程同时触发。
如何在后台线程运行时保持动画继续运行?