本文主要是记录一些零碎的知识点
android版本的更新,使得线程无法更新主线程(UI)里的内容,当然SeekBar除外,可以参考本地音乐播放器的静态常量部分,它可以在子线程里被更改,其他的控件则无法做到这点
这里使用handler + 线程来实现UI的更新,线程可以使用 Runnable 接口,也可以使用继承Thread类,这都是一样的,首先我们需要一个android.os.handler,没有几行代码
布局文件就是一个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);
}
};
}
没有几行代码