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

  • Post author:
  • Post category:其他




起因

因为要创建一个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;

也可以去除



版权声明:本文为qq_44273879原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。