Handler初探(一)

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!!!

 

 

好了  千言万语都不如自己敲代码试试   自己动手敲一遍会很爽哦

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值