如何添加多线程来显示图形以避免线程超载?

问题描述:

我写了一个使用单线程工作正常的小程序,但我想通过单独的线程调用图形。如何添加多线程来显示图形以避免线程超载?

该图形的调用来自按钮按下。 (这工作正常)

  case R.id.button3: 
      draw = new Draw(this); 
      setContentView(draw); 
      break; 

如果我试图包住该代码是这样的...

  Thread thread = new Thread(new Runnable(){ 
       @Override 
       public void run(){ 
        draw = new Draw(this); 
        setContentView(draw); 
       } 
      }); 
      thread.start(); 

我与(这)个问题。我不完全理解“这个”在做什么,除了它指的是它所在的类。 答案简单吗? 我想这样做,因为我有以下消息“应用程序可能在其主线程上做了太多工作。”

谢谢

Android在大多数情况下禁止从非UI线程修改UI。只有SurfaceView可以绘制异步。

而你的情况下,这个返回和Runnable的实例。试试。这个

+0

如果我这样做,我得到以下“setContentView(draw);”错误“android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触及其视图” –

+0

检查我的答案plz –

我认为你需要这个活动的上下文。

是指你在课堂上,你在呼唤在Thread类,所以这与线程关联。

+0

您可能是正确的。在Draw类中有以下行:“public Draw(Context context)”。改成“draw = new draw Draw(Context context)”只是给了我另一个错误。 –

+0

如果你在一个活动,试试这个:“draw = new Draw(YourActivityName.this)” –

+0

如果我这样做,我会在“setContentView(draw);”上得到以下错误: “android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触及其视图” –

假设你的匿名类是封闭在一个类名Outer,那么你可以这样写:

class Outer { 
    ... 
    ... someMethod(...) { 
     Thread thread = new Thread(new Runnable(){ 
      @Override 
      public void run(){ 
       draw = new Draw(Outer.this); // access enclosing instance 
       setContentView(draw); 
      } 
     }); 
     thread.start(); 
    } 
    ... 
} 

当心,你不应该异步画...

+0

如果我这样做,我会在“setContentView(draw);”上得到以下错误: “android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触及其视图” –

+0

对不起,如果我是愚蠢的,但我真的不明白这一点。 –