总结五种更新UI的方法

方法一:Handler

子线程调用Handler的sendMessage(message)发送事件。

			new Thread(new Runnable() {

				@Override
				public void run() {

					Message ms = new Message();
					ms.what = 1;
					handler.sendMessage(ms);
	
				}
			}).start();

private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {

			switch (msg.what) {
			case 1:

				if (str.getText().toString().equals("更新后")) {

					str.setText("hello world");

				} else {

					str.setText("更新后");
				}

				break;

			default:
				break;
			}

			super.handleMessage(msg);
		}

	};
方法二:View.post(Runnable )

	new Thread(new Runnable() {

						@Override
						public void run() {
							
						}
					//str 是一个textview
					str.post(new Runnable() {
						
						@Override
						public void run() {
							if (str.getText().toString().equals("更新后")) {

								str.setText("hello world");

							} else {

								str.setText("更新后");
							}

							
						}
					});
				}
			}).start();

方法三:Activity.runOnUiThread(Runnable )

与view.post类似 注意下面的方法都写在一个新的线程里面的

					MainActivity.this.runOnUiThread(new Runnable() {
						
						@Override
						public void run() {
							
							if (str.getText().toString().equals("更新后")) {

								str.setText("hello world");

							} else {

								str.setText("更新后");
							}

							
						}
					});

方法四:AsyncTask
	private class  ViewAsytask extends AsyncTask<String,Integer, String>{
		

		//运行耗时操作之前 可以在这里面对UI组件进行操作
		@Override
		protected void onPreExecute() {
			
			super.onPreExecute();
		}

		//耗时操作完成之后,可以在这里对UI操作进行操作
		@Override
		protected void onPostExecute(String result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
		}

		//耗时的操作
		@Override
		protected String doInBackground(String... params) {
		
			return null;
		}
		
		
		
	}

方法五:广播接收者

class SeekbarRecever extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
                  
			String msg=intent.getStringExtra("musicupdate");
			 
			if (msg.equals("update")
					&& isChangeing == false) {

				MusicBar.setMax(playerService.GetDuration());
				MusicBar.setProgress(playerService.GetCurrentPosition());
			

			}else if(msg.equals("reset")){
				
				MusicBar.setProgress(0);
				
			}
             
		}

	}




你可能感兴趣的:(thread,UI,AsyncTask)