首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncTask:无效视图不生效

AsyncTask:无效视图不生效
EN

Stack Overflow用户
提问于 2018-03-16 08:58:17
回答 1查看 292关注 0票数 7

更新

我的小橱窗存储在Bitbucket上。

https://bitbucket.org/solvapps/animationtest

我有一项活动,里面有视野。Contentview设置为此视图。

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    private MyView myView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = new MyView(this);
        setContentView(myView);
        startMovie();
    }

    public void startMovie(){
        MovieTask movieTask = new MovieTask(myView, this);
        movieTask.doInBackground(null);
    }

}

MovieTask是一个同步任务,并定期刷新视图。但是,失效()并不刷新视图。

代码语言:javascript
复制
public class MovieTask extends AsyncTask<String, String, String> {

    MyView drawingView;
    MainActivity mainActivity;

    public MovieTask(MyView view, MainActivity mainActivity){
        this.mainActivity = mainActivity;
        this.drawingView =view;
    }

    @Override
    protected String doInBackground(String... strings) {

        for(int i=20;i<100;i++){
            drawingView.myBall.goTo(i,i);
            publishProgress();
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        mainActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.v("DEBUG_DRAW","in  onProgressUpdate()");
                drawingView.invalidate();
            }
        });

    }

}

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2018-03-16 09:10:36

有两种可能的情况,首先如文档所述

无效使整个视图无效。如果视图是可见的,那么onDraw(android.graphics.Canvas)将在将来的某个时候被调用。

因此,尝试在onResume中运行您的代码,可能还看不到View

其次,View#invalidate告诉系统在主UI线程空闲时重新绘制视图。也就是说,在所有其他立即完成的工作完成后,调用无效计划您的视图将被重新绘制。

如果希望定期更新视图,请使用Handler#postDelay或在单独的线程中运行它,并使用View#postInvalidate更新View并触发对onDraw的调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49316619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档