IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android sendmessage语句 执行两次后闪退解决方法 -> 正文阅读

[移动开发]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;也可以去除

总结

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:43:01  更:2022-02-22 20:43:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:07:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码