Android主线程不能运行耗时操作。我们通常是在子线程中运行耗时操作, 我们在运行完耗时操作后,我们一般能够通过下面几种方式来实现ui界面的更新。
首先是布局文件:
————–代码实现,有凝视————————————-
public class MainActivity extends Activity implements OnClickListener { private TextView mTextView; private Button update_mButton_01; private Button update_mButton_02; private Button update_mButton_03; private Button update_mButton_04; private Handler mPostHander = new Handler() { public void handleMessage(android.os.Message msg) { if (msg.what == 1) { // 更新UI mTextView.setText("通过Hander Send Message更新Ui"); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initEvents(); } /** * 初始化控件 * @description: * @date 2015-10-8 上午10:55:49 */ private void initViews() { this.mTextView = (TextView) findViewById(R.id.mTextView); this.update_mButton_01 = (Button) findViewById(R.id.update_mButton_01); this.update_mButton_02 = (Button) findViewById(R.id.update_mButton_02); this.update_mButton_03 = (Button) findViewById(R.id.update_mButton_03); this.update_mButton_04 = (Button) findViewById(R.id.update_mButton_04); } /** * 事件监听 * @description: * @date 2015-10-8 上午10:56:02 */ private void initEvents() { this.update_mButton_01.setOnClickListener(this); this.update_mButton_02.setOnClickListener(this); this.update_mButton_03.setOnClickListener(this); this.update_mButton_04.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.update_mButton_01:// 第一种方式,通过Hander.post方法来实现UI更新 new Thread() { public void run() { try { sleep(2000);// 休眠2秒,模拟耗时操作 mPostHander.post(new Runnable() { @Override public void run() { // 更新UI mTextView.setText("通过Hander Post更新Ui"); } }); } catch (InterruptedException e) { e.printStackTrace(); } }; }.start(); break; case R.id.update_mButton_02:// 直接通过Hander发送Message来更新UI new Thread() { public void run() { try { sleep(2000);// 休眠2秒。模拟耗时操作 mPostHander.sendEmptyMessage(1); } catch (InterruptedException e) { e.printStackTrace(); } }; }.start(); break; case R.id.update_mButton_03:// 通过runOnUiThread来实现ui更新 new Thread() { public void run() { try { sleep(2000);// 休眠2秒。模拟耗时操作 runOnUiThread(new Runnable() { @Override public void run() { // 更新UI mTextView.setText("通过runOnUiThread更新Ui"); } }); } catch (InterruptedException e) { e.printStackTrace(); } }; }.start(); break; case R.id.update_mButton_04:// 直接利用View.post方法来更新ui mTextView.post(new Runnable() { @Override public void run() { // 更新UI mTextView.setText("通过View.post()更新Ui"); } }); break; } }}