如何防止onDraw中的Thread.Sleep影响其他活动?

时间:2013-02-06 12:11:41

标签: android multithreading ondraw thread-sleep

我有一个自定义View类,它正在绘制图像。问题是当我使用Thread.sleep(200)时;在onDraw方法中,它还会影响同一活动中的XML元素。所以我必须等待200毫秒,直到发生一些事情。

MainPage extends Activity implements OnClickListener{
    onCreate(...){

        RelativeLayout rl = (RelativeLayout) findViewById(R.id.main_rl);
        rl.addView(new CustomView(this));
    }

    onClick(View v){
        switch(v.getId){
            ...
        };
    }
}


CustomView extends View{

    onDraw(){
        try{
            Thread.sleep(200);
            ....
        }
    }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

永远不要在Android中的任何UI侦听器回调(或在UI线程上运行的任何其他地方)中运行长时间操作。相反,创建一个新线程来执行睡眠,然后做任何需要做的事情。请记住,如果您想再次与UI进行交互,则需要在UI线程中执行此操作,您可以通过调用runOnUiThread()来安排。

CustomView extends View{

    onDraw(){
        (new Thread(myRunnable)).start();
    }
}

Runnable myRunnable = new Runnable() {
    void run() {
        try { Thread.sleep(...); } catch...;
        do_non_ui_things_if_needed();
        runOnUiThread(some_runnable_for_this_if_needed);
    }
}