Hello CSDN 各位大佬们
我是初入安卓坑的小白 可能有不正确之处 希望大家能斧正
为了方便认识和理解 特意查了一下handler的意思
- handler可以解决安卓只能在主线程操作ui的难题
- 下面先说一下小Demo的code
- 首先在activity_main中新建一个TextView并将id命名为main_text
- 下面是MainActivity code
public class MainActivity extends AppCompatActivity {
private final String tag = "Handler test";
public static final int action = 1;
private TextView textView;
private Handler handler = new Handler() {
public void handleMessage(Message message) {
switch (message.what) {
case action:
textView.setText("handler test");
Log.d(tag, "handlerMessage: ok!!!");
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.main_text);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what=action;
handler.sendMessage(message);
// textView.setText("...");
Log.d(tag, "onClick:done ");
}
}).start();
}
});
}
}
- 下面可能有小伙伴要问了:为什么一个简单的TextView监听事件却要开线程!
- 这是因为我想模拟子线程操作ui
- 上面的代码是可以编译的
下面,如果把注释的 textView.setText("..."); 加上 会怎么样呢?
你会发现:软件竟然崩溃了!
别急,让我们回头看看log日志
里面有一行很重要:(敲黑板) “Only the original thread that created a view hierarchy can touch its views.”
它的大致意思是只有主线程操作ui ,子线程你个弟弟还不行(手动滑稽)
所以:一定要牢记:子线程不能操作ui!!!
好了 千言万语都不如自己敲代码试试 自己动手敲一遍会很爽哦