android之handler更新UI

本文主要是记录一些零碎的知识点

 android版本的更新,使得线程无法更新主线程(UI)里的内容,当然SeekBar除外,可以参考本地音乐播放器的静态常量部分,它可以在子线程里被更改,其他的控件则无法做到这点

这里使用handler + 线程来实现UI的更新,线程可以使用 Runnable 接口,也可以使用继承Thread类,这都是一样的,首先我们需要一个android.os.handler,没有几行代码

android之handler更新UI_第1张图片android之handler更新UI_第2张图片

布局文件就是一个button开启线程

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="android.cl.com.androidlesson.Lesson05Activity"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/clickbutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAllCaps="false"
        android:text="click me"
        android:onClick="changeTextView"/>

</LinearLayout>

activity里分别用runnable和thread实现了

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;


public class Lesson05Activity extends AppCompatActivity {
    private TextView textView;
    private Handler handler;
    String[] msg ={"11111","2222222","3333333","444444444","5555555555","6666666","77777777","8888888"
            ,"99999999","0000000"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lesson05);
        textView = (TextView)findViewById(R.id.textView);
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                textView.setText(msg.getData().getString("info"));
            }
        };
    }

    public void changeTextView(View view) {
        //Thread
       /* new Thread(){
            @Override
            public void run() {

                Message message = new Message();
                Bundle bundle = new Bundle();
                //Math.random()   [0.0-1.0)
                bundle.putString("info",msg[(int)(Math.random()*10)] );
                message.setData(bundle);
                handler.sendMessage(message);
            }
        }.start();*/

        //Runnable,1s自动更改一次
        handler.post(change);
        findViewById(R.id.clickbutton).setEnabled(false);

    }
    Runnable change = new Runnable() {
        @Override
        public void run() {
            Message message = new Message();
            Bundle bundle = new Bundle();
            //Math.random()   [0.0-1.0)
            bundle.putString("info", msg[(int) (Math.random() * 10)]);
            message.setData(bundle);
            handler.sendMessage(message);
            handler.postDelayed(change,1000);
        }
    };
}
没有几行代码

你可能感兴趣的:(android,handler)