不是说 android开发的子线程没法更新主线程的界面数据吗?需要用到handler或者runOnUiThread();来处理。
为什么我这里就修改了 activity 的数据呢?
public class HandlerDemoActivity extends AppCompatActivity {
private TextView tvShow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler_demo);
initView();
}
/**
* 开启休眠 5s 去取水的子线程
* @param view
*/
public void myStart(View view) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep( 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
tvShow.setText("子线程把水取来了"); // 这里的子线程居然把主线程的界面更新了,没报错,很奇怪。
}
}).start();
Toast.makeText(this, "主线程启动子线程开始其他工作了", Toast.LENGTH_SHORT).show();
tvShow.setText("主线程叫子线程去取一杯水");
}
private void initView() {
tvShow = (TextView) findViewById(R.id.tv_show);
}
}