svg-android のバリアントを使用して、最初に多くの SVG を Drawables に変換する必要があるアプリケーションがあります。
私が遭遇した問題は、変換がかなりプロセッサを集中的に使用することです。そのため、UI スレッドで実行すると、変換中にすべてが 10 秒ほど一時停止します。変換をバックグラウンド スレッドに移動しようとしましたが、すべての Drawables が完了する前に、Drawables の配列に依存する他のメソッドが起動するため、奇妙なことが発生します。ローディング アニメーションを実行するためにいくつかの方法を試しましたが、バックグラウンド プロセスがアクティブな間はアニメーション化されません。
関連するコードは次のとおりです。
//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
また、ループの有無にかかわらず、loadingView に不定値を使用してみましたwhile
(実際には何もしないように変更されています)。バックグラウンド スレッドが開始されるまでアニメーション化され、その時点でフリーズします。
while
そこにあるアニメーション コードをループから取り出すと、バックグラウンド スレッドと同時にではなく、バックグラウンド スレッドが終了した後にアニメーションが起動します。
バックグラウンド スレッドの実行中にアニメーションを続行するにはどうすればよいですか?