线程中更新UI

Android的UI也是线程不安全的。也就是说,如果想要更新应用程序里的ui元素,则必须在主线程中进行。

1.布格文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.sh.androidthreadtest.MainActivity">

    <Button
        android:id="@+id/change_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:text="Change Text" />
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="20sp"
        android:text="Hello World!"/>

</RelativeLayout>

2.主文件:MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    public static final int UPDATE_TEXT =1 ; //定义一个整数常量update_text,用于表示更新textview这个动作
    private TextView text;
 private Handler handler = new Handler(){  //新增一个handler对象,并重写父类的handlermessage()的方法并对message进行处理
     @Override
     public void handleMessage(Message msg) {
         switch (msg.what){
             case UPDATE_TEXT:
                 //在这里可以进行ui操作
                 text.setText("Nice to meet you");
                 break;
         }
     }
 };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button changeText=(Button)findViewById(R.id.change_text);
        text = (TextView)findViewById(R.id.text);
        changeText.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
         switch (v.getId()){
             case R.id.change_text:
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                             Message message = new Message();
                            message.what = UPDATE_TEXT;
                            handler.sendMessage(message);//将message对象发送出去
                        }
                    }).start();
                 break;
             default:
                 break;
         }
    }

    /*
    @Override
    public void onClick(View v) {
       switch (v.getId()){
           case R.id.change_text:
                  new Thread(new Runnable() {    //从接口runnable中定义子线程
                      @Override
                      public void run() {
                           text.setText("Nice to meet you");
                      }
                  }).start();
               break;
           default:
               break;
       }

    }*/

}


   


   

猜你喜欢

转载自blog.csdn.net/esucc/article/details/77162359