2012-01-07 42 views
0

你好,Android和线程

我有一个活动,其布局是由一个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(); 
} 

是我的异步的理解是否正确?如果这项工作的onDraw给出有效的代码?

我也许应该说,打印输出“嗬”和“线程”被打印出来无数次这样的东西必须正确发生。更关键的是它是否印有“卫矛”,那么这无疑应重绘旁边我看...但没有任何反应:(

+0

你这样做应该通过画布绘制。请参阅[this](http://developer.android.com/guide/topics/graphics/2d-grap hics.html)文章。 – clemp6r 2012-01-07 10:26:45

回答

1

您使用AsyncTask

这有两个方法,让之前更新主UI和线程后已经跑

而且汤姆在评论说,如果你想继续,而的AsyncTask正在地跑更新的主界面,检查出this您可以通过publishProgress()

+1

这听起来像OP想不断更新用户界面,所以我认为他应该重写的方法是http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate(Progress ...),它可以让您在AsyncTask后台线程的生命周期中不断更新UI(通过publishProgress()) – 2012-01-07 03:39:19

+0

好的建议@TomDignan我用这个更新了我的答案。 – 2012-01-07 03:40:59

+0

感谢您的回答,我们似乎在同一页上。虽然我不完全理解这些泛型是什么。我会在publishProgress(Progress ...)中发送什么内容?请记住,我现在在视图上压倒onDraw,并且有很多更新正在绘制中。或者它会像说onProgressUpdate(){invalidate(); } – 2012-01-07 04:10:21