总结五种更新UI的方法

来源:互联网 发布:大同证券交易软件 编辑:程序博客网 时间:2024/05/09 03:30

方法一:Handler

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

new Thread(new Runnable() {@Overridepublic void run() {Message ms = new Message();ms.what = 1;handler.sendMessage(ms);}}).start();

private Handler handler = new Handler() {@Overridepublic 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() {@Overridepublic void run() {}//str 是一个textviewstr.post(new Runnable() {@Overridepublic 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() {@Overridepublic void run() {if (str.getText().toString().equals("更新后")) {str.setText("hello world");} else {str.setText("更新后");}}});

方法四:AsyncTask
private class  ViewAsytask extends AsyncTask<String,Integer, String>{//运行耗时操作之前 可以在这里面对UI组件进行操作@Overrideprotected void onPreExecute() {super.onPreExecute();}//耗时操作完成之后,可以在这里对UI操作进行操作@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);}//耗时的操作@Overrideprotected String doInBackground(String... params) {return null;}}

方法五:广播接收者

class SeekbarRecever extends BroadcastReceiver {@Overridepublic 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);}             }}




0 0
原创粉丝点击