软件开发学习记录(Day5-Day8)

以下包含自己学习过程中大量的心路历程(很菜很菜,只是作为记录随时反省+督促自己的,见笑!)


Day5:想实现服务器数据传回软件并在页面上显示的功能的分析

1.1 layout文件的修改

这一步先把layout.xml布局文件改一改,比较简单

如果报错:This view is not constrained vertically: at runtime it will jump to the top unless you add a vertica
可以选择点击这个地方:

软件开发学习记录(Day5-Day8)
分析一下应该是内存泄露了(后来找bug是因为我原来的代码里面乱用对象,很多时候让他们访问的是一个空对象,然后卡死了!)
请添加图片描述

Day7:成功啦啦!!!

先对昨天的想法进行更正,重新理思路:
昨天最大的错误就是线程乱用,正常逻辑中应该是每点击一次按钮,就是一条线程去请求跟服务器通信,所以这里完全可以在按钮的监听里对于每一次点击实现一个继承Thread的对象GetMessgae

而这么做的重要原因有关对安卓主线程的理解:

1. 安卓主线程

对于用户体验而言最直接的就是页面卡不卡,所以可以这么理解,安卓主线程在我们点击手机应用列表的图标后,就会启动,它会去负责页面的调度和绘制,如果我们把对一些消息的响应安排在主线程里,它页面可能没画完,但是按照代码逻辑,它这个时候却要去等待信号的传回,这是非常傻的,然后用户就会觉得这个app就是逊啦。
所以我们需要将一些具体实现的活动安排在后台去,让用户看不到实现细节,感觉上是前端的桌面应用都在正常运行的时候程序就已经传回信息了(而这一效果的实现也就是使用线程的目的,cpu会在后台分化非常小的时间片去执行各种线程,对于用户的体验就是看到设备能在短期之内完成各种事情),说这么多就是要强调——完成想要实现的方法时一定不能跟主线程发生冲突。

而这就涉及到如何调度处理分支线程的信息传回跟主线程的交互——重写handle

2. Android中Handler的使用

先看定义:Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制。

我自己尝试了一下之后,对Handler的理解是:
Hanlder原本是抽象类,但他更像一个容器,当我需要处理一个线程的消息时,我就在对应的线程里申明一个handle类,相当于告诉线程——你要是有什么消息啊,文本啊,你就要记得往这个handle类,你就往里传,handle帮你保管。handle看久了好像憨der啊,但是它一点也不傻!比我聪明多了

主线程里:

你想要实现的线程里:

所以感觉Handler实际上也像一个消息队列。别的线程把消息都存进去,然后主线程需要显示啥的时候,就去这个里面找:

找到了,就拿出对应的Message对象,对其进行处理,处理完之后拿出下一个Message,继续进行处理,周而复始。

3. 服务端代码实例


软件开发学习记录(Day5-Day8)

来源:KQ.

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月21日
下一篇 2021年9月21日

相关推荐