我在下面有以下代码
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()
时启动线程,但上面的代码会返回错误
我出错的地方?如果你能进一步解释,因为我刚开始学习android。谢谢。07-10 17:20:20.046:E / AndroidRuntime(6247): android.app.SuperNotCalledException:Activity {yens.alisa.menu/yens.alisa.menu.StartGameActivity}没有打电话 通过super.onStart()
答案 0 :(得分:1)
鉴于堆栈跟踪,唯一可能导致它的是BaseActivity
未调用super.onCreate()
答案 1 :(得分:0)
从主线程以外的线程中更新用户界面元素违反了Android开发的关键规则。 因此,为了更新用户界面,需要为线程实现Handler或使用AsyncTask。
虽然这可能不是问题。检查像@blackbelt建议的BaseActivity。
答案 2 :(得分:0)
您无法直接从后台线程访问视图元素。
此外,如果您在程序中使用AsynTask
,则只有OnpreExecute
和OnPostExecute
方法可以在UI线程上运行时直接访问view元素。 doInBackground
方法在单独的线程上运行。
在您的情况下以及doInBackground
Asyntask
中,您可以使用 -
txtCustomerCount.post(new Runnable() {
@Override
public void run() {
txtCustomerCount.setText(Integer.toString(count));
}
});
但是,您的错误日志与问题无关。