[Android开发]Android更新UI的五种方式

xiaoxiao2021-02-27  257

Android更新UI的五种方式: 

1.handler.post 

2.activity.runOnUiThread 

3.view.post 

4.handler+Thread 

5.AsyncTask

下面来看下以下的例子

import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener{ private Layout layout; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initLayout(); initValue(); } private void initLayout(){ layout=new Layout(); layout.helloText=(TextView) findViewById(R.id.helloText); layout.webImg=(ImageView) findViewById(R.id.webImg); layout.button1=(Button) findViewById(R.id.button1); layout.button2=(Button) findViewById(R.id.button2); layout.button3=(Button) findViewById(R.id.button3); layout.button4=(Button) findViewById(R.id.button4); layout.button5=(Button) findViewById(R.id.button5); layout.button1.setOnClickListener(this); layout.button2.setOnClickListener(this); layout.button3.setOnClickListener(this); layout.button4.setOnClickListener(this); layout.button5.setOnClickListener(this); } private void initValue(){ layout.button1.setText("1.Handler.post"); layout.button2.setText("2.activity.runOnUiThread"); layout.button3.setText("3.view.post"); layout.button4.setText("4.handler+Thread"); layout.button5.setText("5.AsyncTask"); } private class Layout{ TextView helloText; ImageView webImg; Button button1; Button button2; Button button3; Button button4; Button button5; } //1.Handler.post private void method_1(){ new Handler().postDelayed(new Runnable() { @Override public void run() { layout.helloText.setText("Handler的postDelayed延时一秒"); } }, 1000); } //2.activity.runOnUiThread private void method_2(){ new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); runOnUiThread(new Runnable() { @Override public void run() { layout.helloText.setText("在子线程中使用activity.runOnUiThread"); } }); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } //3.view.post private void method_3(){ new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); layout.helloText.post(new Runnable() { @Override public void run() { layout.helloText.setText("在子线程中使用TextView.post"); } }); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } //4.Handler+Thread private void method_4(){ handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==1){ Bundle bundle=msg.getData(); String name=bundle.getString("name"); String sex=bundle.getString("sex"); String age=bundle.getString("age"); layout.helloText.setText(name+"\n"+sex+"\n"+age); } } }; Thread thread=new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } Message msg=Message.obtain(); msg.what=1; Bundle bundle=new Bundle(); bundle.putString("name", "张三"); bundle.putString("sex", "男"); bundle.putString("age", "16"); msg.setData(bundle); handler.sendMessage(msg); } }); thread.start(); } //5.AsyncTask private void method_5(){ AsyncTask<String, Integer, Bitmap> async=new AsyncTask<String, Integer, Bitmap>(){ @Override protected Bitmap doInBackground(String... params) { publishProgress(0); HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(params[0]); publishProgress(30); final Bitmap bitmap; try { HttpResponse response = client.execute(get); bitmap = BitmapFactory.decodeStream(response.getEntity() .getContent()); } catch (Exception e) { return null; } publishProgress(100); return bitmap; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); layout.helloText.setText("进度-"+values[0]+"%"); } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); if(result==null){ layout.helloText.setText("获取图片失败"); }else{ layout.helloText.setText("获取图片成功"); layout.webImg.setImageBitmap(result); } } @Override protected void onPreExecute() { layout.webImg.setImageBitmap(null); } }; async.execute("http://imgsize.ph.126.net/?imgurl=http://img2.ph.126.net/-RloZHuMn-ultOW_YDF5fQ==/" + "6608648723609095427.jpg_96x96x0x90.jpg"); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1: method_1(); break; case R.id.button2: method_2(); break; case R.id.button3: method_3(); break; case R.id.button4: method_4(); break; case R.id.button5: method_5(); break; default: break; } } }

转载请注明原文地址: https://www.6miu.com/read-4298.html

最新回复(0)