1.做定时任务,和线程与线程之间的处理
2.循环着
3.消息
4.消息队列,专门存储消息
点击事件
点击后会将这个id的TextView的text变为imooc
final TextView textView=(TextView)findViewById(R.id.textView); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { textView.setText("imooc"); } });
创建新线程(子线程),但是不能在子线程里进行进行改变视图,
但是我们可以将Message改变为固定,然后在主线程里改变
if(msg.what==1001){ textView.setText("imooc"); }
报错格式
只有主线程才可以改变视图
Only the original thread that created a view hierarchy can touch its views.
源代码
package com.example.handlerproject; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.TextView; import javax.security.auth.login.LoginException; public class MainActivity extends AppCompatActivity { UI线程,即主线程 private static final String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView textView=(TextView)findViewById(R.id.textView); //创建handler final Handler handler=new Handler(){ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); //处理消息 Log.i("TAG","hadleMessage:"+msg.what); if(msg.what==1001){ textView.setText("imooc"); } } }; findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //子线程 new Thread(new Runnable() { @Override public void run() { handler.sendEmptyMessage(1001); 到这一步就会通知主线程更新 } }).start(); } }); } }