nvalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通知UI线程进行界面更新。
postInvalidate()在工作者线程中被调用。我在看有的五子棋源码的时候,里面有以下一段public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { switch (mGameState) { case GAMESTATE_PRE:
case GAMESTATE_RUN: {
break; case GAMESTATE_PAUSE:                                
break; case GAMESTATE_END:                                
break; } this.invalidate(); } return true; }
这样写是不是不合法,虽然能运行。应该搞一个Handler,在Handler里面invalidate的吧

解决方案 »

  1.   

    其实你的UI更新完全可以是在点击游戏屏幕时进行更新,所以不需要做什么都要UI更新,你要invalidate()无非也就是重绘棋盘和棋子.
      

  2.   

    这个还是在UI线程吧 
    并没有走handler啊
      

  3.   

    是不是因为是被动更新的,而不像网络下载东西这样,所以不用放在Handler里面,像这种根据用户被动更新的onTouchEvent是不是可以看作非UI线程的另外的工作线程,因为它要监听用户的监听事件,所以系统需要另外开一个线程来监听呢