我使用AsyncTask类来执行任务并显示ImageView。
但是我每隔10秒就执行一次这个任务,为此我在同一个任务中调用:
onPostExecute()
方法。
这是工作但是10秒后imageView会刷新,为什么?
这是我的代码:
@Override
protected void onPostExecute(Void result) {
ProgressBar progress = (ProgressBar) rootView.findViewById(R.id.progress);
progress.setVisibility(View.GONE);
ImageView imageView = (ImageView) rootView.findViewById(R.id.myView);
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
SVG svg;
InputStream is = null;
try {
is = new FileInputStream(mySVG);
svg = SVG.getFromInputStream(is);
Drawable drawable = new PictureDrawable(svg.renderToPicture());
imageView.setImageDrawable(drawable);
} catch (SVGParseException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
imageView.refreshDrawableState();
long start = System.currentTimeMillis();
while ((System.currentTimeMillis() - start) < 10000) {
}
AsyncTask<Object, Integer, Void> t = new Task(rootView).execute();
}
此代码在10秒后刷新imageView,但我会立即刷新,等待10秒并执行另一个任务......
答案 0 :(得分:0)
哇,你在AsyncTask
onPostExecute()
然后“吃CPU”
while ((System.currentTimeMillis() - start) < 10000) {
}
不要这样做。
使用Handler
/ Runnable
组合。
以下是一个例子:
在你的Activity
中:
private Handler timerHandler;
private Runnable timerRunnable;
// ...
@Override
public void onCreate() {
super.onCreate();
timerHandler = new Handler();
timerRunnable = new Runnable() {
@Override
public void run() {
// do your refresh here
timerHandler.postDelayed(timerRunnable, 10000);
}
};
timerHandler.post(timerRunnable);
}