如何添加多线程来显示图形以避免线程超载?
我写了一个使用单线程工作正常的小程序,但我想通过单独的线程调用图形。如何添加多线程来显示图形以避免线程超载?
该图形的调用来自按钮按下。 (这工作正常)
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
的实例。试试。这个
我认为你需要这个活动的上下文。
这是指你在课堂上,你在呼唤这在Thread类,所以这是与线程关联。
您可能是正确的。在Draw类中有以下行:“public Draw(Context context)”。改成“draw = new draw Draw(Context context)”只是给了我另一个错误。 –
如果你在一个活动,试试这个:“draw = new Draw(YourActivityName.this)” –
如果我这样做,我会在“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();
}
...
}
当心,你不应该异步画...
如果我这样做,我会在“setContentView(draw);”上得到以下错误: “android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触及其视图” –
对不起,如果我是愚蠢的,但我真的不明白这一点。 –
如果我这样做,我得到以下“setContentView(draw);”错误“android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程可以触及其视图” –
检查我的答案plz –