Android sendmessage语句 执行两次后闪退解决方法

起因

因为要创建一个Tcp的数据传输功能,为了先测试和学习,先创建了一个Handler的数据传输的demo(测试代码)

错误的demo代码

Handler的信息处理代码

//接受处理信息
TextView message_text = findViewById(R.id.message_text);
Handler handler = new Handler(Looper.myLooper()){
	//此处重写handleMessage方法处理消息
	//注:没执行一次handler.sendMessage(message);都会执行一次handlerMessage中的代码
	@Override
	public void handleMessage(@NonNull Message msg) {
		super.handleMessage(msg);
		if(msg.obj != null){
			//每次接受到消息在文本框message_text中显示
			message_text.append((String)msg.obj + "\n");
			//清空消息
			msg.obj = null;
		}
	}
};

测试发送消息的代码

//测试发送代码
Button aaa = findViewById(R.id.ceshi_button); //获得按键的对象
Message message =Message.obtain(); //创建消息类
//创建按键的点击事件代码
aaa.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    	//设置消息为111
        message.obj = "111";
        //发送消息
        handler.sendMessage(message);
    }
});

此时软件在按下第一次按钮的时候可以显示数字111
第二次按下按钮就会闪烁界面,并且重启.文本框清空

解决方法

在发生问题后,第一时间时查询百度等搜索引擎,均无果
android studio 显示的错误代也很乱无法查明原因
随后询问公司内的前辈,告诉我要加上try catch.最终得知问题所在

//在发送信息的代码上加上try catch
try {
    handler.sendMessage(message);
}catch (Exception e){ //因为不知道是什么异常直接捕捉异常的最高父类
    e.printStackTrace();
}

再次执行会触发重启的操作得到This message is already in use的提示
显示的意思是信息已经被使用过

解决方式

//测试发送代码
Button aaa = findViewById(R.id.ceshi_button);//获得按键的对象
aaa.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Message message =Message.obtain();//创建消息类放入按键点击事件每次点击都新建一个消息类
        //设置消息为111
        message.obj = "111";
        //发送消息
        handler.sendMessage(message);

    }
});

消息类每次都新建一个,那么消息处理的代码中msg.obj = null;也可以去除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值