Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当活动开始时启动线程_Android_Multithreading - Fatal编程技术网

Android 当活动开始时启动线程

Android 当活动开始时启动线程,android,multithreading,Android,Multithreading,我有下面的代码 public class StartGameActivity extends BaseActivity { public TextView txtCustomerCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.st

我有下面的代码

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:活动 {yens.alisa.menu/yens.alisa.menu.StartGameActivity}未调用 到super.onStart()为止


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

鉴于堆栈跟踪,唯一可能导致它的原因是
BaseActivity
没有调用
super.onCreate()
从主线程以外的线程更新用户界面元素违反了安卓开发的关键规则。 因此,为了更新用户界面,有必要为线程实现一个处理程序或使用AsyncTask


虽然这可能不是问题所在。检查BaseActivity,如@blackbelt Suggered。

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

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


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

是否添加了onStart()?Stacktrace显然与问题无关:(我对没有读取显式错误消息投了反对票。@C4stor这只是显示的错误日志,您可能需要证据的屏幕截图?我认为您没有发布整个跟踪。另外,请查看您的代码:
txtCustomerCount.setText(Integer.toString(count))
应该在UI线程上调用,如果活动本身完成,您也应该退出循环。@Mahan:我相信错误就在这里。我不相信它与您显示的代码部分或任何类型的多线程问题有关。blackbelt很可能是正确的
txtCustomerCount.post(new Runnable() {

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