活动开始时启动一个线程

时间:2013-07-10 09:22:25

标签: android multithreading

我在下面有以下代码

public class StartGameActivity extends BaseActivity {
   public TextView txtCustomerCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.start_game);
        this.txtCustomerCount = (TextView) findViewById(R.id.txtCustomerCount);
        testThread();
    }

    public void testThread(){       
         Runnable runnable = new Runnable() {
              @Override
              public void run() {
                  int count = 0;
                  boolean stop = false;
                  while(!stop){
                      txtCustomerCount.setText(Integer.toString(count));
                      fakework(2000);
                      count++;
                      if(count > 99){
                          stop = true;
                      }
                  }
              }
         };
         new Thread(runnable).start();
    }

    public void fakework(int lasts){
        try {
           Thread.sleep(lasts);
    } catch (InterruptedException e) {
           e.printStackTrace();
    }
}
}

现在我想要的是在执行onCreate()时启动线程,但上面的代码会返回错误

  

07-10 17:20:20.046:E / AndroidRuntime(6247):   android.app.SuperNotCalledException:Activity   {yens.alisa.menu/yens.alisa.menu.StartGameActivity}没有打电话   通过super.onStart()

我出错的地方?如果你能进一步解释,因为我刚开始学习android。谢谢。

3 个答案:

答案 0 :(得分:1)

鉴于堆栈跟踪,唯一可能导致它的是BaseActivity未调用super.onCreate()

答案 1 :(得分:0)

从主线程以外的线程中更新用户界面元素违反了Android开发的关键规则。 因此,为了更新用户界面,需要为线程实现Handler或使用AsyncTask。

虽然这可能不是问题。检查像@blackbelt建议的BaseActivity。

答案 2 :(得分:0)

您无法直接从后台线程访问视图元素。 此外,如果您在程序中使用AsynTask,则只有OnpreExecuteOnPostExecute方法可以在UI线程上运行时直接访问view元素。 doInBackground方法在单独的线程上运行。

在您的情况下以及doInBackground Asyntask中,您可以使用 -

txtCustomerCount.post(new Runnable() {

                        @Override
                        public void run() {
                            txtCustomerCount.setText(Integer.toString(count));                          
                        }
                    });

但是,您的错误日志与问题无关。