喂,
我有一个活动,其布局由单个FrameLayout组成。我有一个扩展View的类,然后将其添加到此布局中。
我想继续吸引这种观点,就像在游戏循环中一样。
问题是我是android的新手,这个线程的东西没有任何意义..
除非我在主UI线程中,否则我真的不能更新布局吗? 我如何开始初始化线程? :(
编辑::这就是我想出来的,但它没有用任何东西更新我的框架。
public class GameFrame extends View
{
private GameThread m_gt;
public GameFrame(Context context, int width int height){
//do some initialisation stuff
}
public GameThread getGameThread(){
if(m_gt != null){
return m_gt;
}else{
m_gt = new GameThread(this);
return m_gt;
}
}
@Override
public void onDraw(Canvas canvas){
//Draw loads of stuff
}
public class GameThread extends AsyncTask<Void, Void, Void>
{
private GameFrame m_gf;
public GameThread(GameFrame gf){
m_gf = gf;
}
@Override
protected void onProgressUpdate(Void... arg0){
System.out.println("Wahoo");
m_gf.invalidate();
}
@Override
protected Void doInBackground(Void... arg0) {
long start, end;
while(some bool){
System.out.println("Threadin'");
publishProgress();
//Fiddle with some values
}
return null;
}
}
}
然后在主要活动中初始化它:
private FrameLayout frame;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
...
frame = (FrameLayout) findViewById(R.id.gameframe);
GameFrame gf = new GameFrame(this, width, height);
frame.addView(gf);
gf.getGameThread().execute();
}
我对Async的理解是否正确?这应该在onDraw中给出有效的代码吗?
我应该说打印输出“wahoo”和“threading”正在打印多次,所以必须正确地发生一些事情。更重要的是,如果它打印了“wahoo”,那么肯定它应该重新绘制我的视图......但没有任何反应:(