解决方案 »
- 求助:android webview加载网页,对网页中资源(如图片、css等)重定向问题
- Android版本检测\自动更新 在线等
- 关于SlidingDrawer的问题
- 如何用3.2创建一个手机模拟器?
- 如何动态改变应用程序窗口大小?
- iphone 的app store网址是多少啊?
- Android老油条请进
- 问个简单的按钮UI问题
- 【android求助】android客户端与php服务端交互,get数据只能在控制台打印无法再客户端显示出来是什么原因
- 如何获得AndroidManifest.xml中<provider>的各属性key、value和标签值?
- 实在搞不定了,各位来看看
- 请教如何动态改变自定义View画图位置
在oncreate中开线程有时会遇到这个问题
因为这个时候检测ui更新是否在子线程的代码还没有准备好(你可以理解为还有没被执行到那里),ui就更新完成了
textView1.setText("test3");
恩 你的推断应该是对的 我等一切初始化完毕,再点击按钮去修改UI就报错了。我代码如下:
final Thread t = new Thread() {
public void run() {
textView1.setText("test3");
bar.setProgress(100);
}
}; button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
t.start();
}
});
这些细节是从哪里得知的呢?我以前不知道UI线程还有没准备好一说,因为在我的印象中UI线程就是主线程,既然开始能显示界面UI了,那么说明主线程已经初始化完毕了,为何还有没准备好一说呢?
以上内容参考博文http://www.cnblogs.com/yydcdut/p/3864072.html下面是Activity的复写函数:
@Override
public void onStart() {
super.onStart();
final TextView finalTextView = contextTextView1;
final Thread t = new Thread() {
public void run() {
Log.e("xface", "onStart");
finalTextView.setText("test-1");
}
};
t.start();
}
@Override
public void onResume() {
super.onResume();
final TextView finalTextView = contextTextView1;
final Thread t = new Thread() {
public void run() {
Log.e("xface", "onResume");
finalTextView.setText("test4");
}
};
t.start();
}
Activity启动顺序是 onCreate->onStart->onResume所以在onCreate和onStart都在调用onResume之前,都能在子线程更新UI,而当onResume执行后,就不行了,就会执行UI检查了,我的代码运行到onResume处就会崩溃,而之前不会