1.怎么用易语言制作答题器
2.LiveData 面试题库、题库解答、答题源码分析
怎么用易语言制作答题器
需要数据库。源码存放题目和答案以及错误答案。题库 其他的答题都好写了。 ------------------------------源码 .版本 2 .程序集 窗口程序集1 .程序集变量 单选框,源码小黄人视频源码 单选框, , "4" .程序集变量 正确答案, 文本型, , , 记录正确答案 .子程序 _按钮答题_被单击, , , 判断问题以及清空 .局部变量 x, 整数型 .局部变量 答案, 文本型 .局部变量 记录正确数量, 整数型 .如果真 (单选框 [1].选中 ≠ 真 且 单选框 [2].选中 ≠ 真 且 单选框 [3].选中 ≠ 真 且 单选框 [4].选中 ≠ 真) 信息框 (“请先选择答案”, 0, ) 返回 () .如果真结束 .计次循环首 (4, x) .如果真 (单选框 [x].选中) 答案 = 单选框 [x].标题 跳出循环 () .如果真结束 .计次循环尾 () ' 这里也需要读数据库里的当前题目的答案,用来判断与选择框里的题库答案是否相符, .如果 (正确答案 = 答案) 记录正确数量 = 记录正确数量 + 1 标签2.标题 = “你一共答对” + 到文本 (记录正确数量) + “道题!答题” .否则 信息框 (“你答错了,源码要努力哦!题库”,答题 0, ) .如果结束 ' 不管对与错,都要继续出题。源码 .计次循环首 (4,题库 x) 单选框 [x].选中 = 假 .计次循环尾 () 出题 () .子程序 __启动窗口_创建完毕 单选框 [1] = 单选框1 单选框 [2] = 单选框2 单选框 [3] = 单选框3 单选框 [4] = 单选框4 置随机数种子 () ' 窗口创建完毕,给予单选框赋值数组,答题方便后面调用。源码 .子程序 _按钮开始_被单击, , , 出题 出题 () ' 现在运行是会出错的,因为数据库没有打开。 .子程序 出题 .局部变量 a, 整数型, , , 记录随机数 .局部变量 x, 整数型 .局部变量 n, 整数型 ' 这里要读写数据库里的内容了。比如我数据库里有条题目。蓄势指标源码我每次都是随机出的题目! a = 取随机数 (1, ) 跳到 (a) 标签1.标题 = 读 (“题目”) ' 这里弄一个程序集的变量,正确答案,要调用的 。 正确答案 = 读 (“答案”) x = 取随机数 (1, 4) 单选框 [x].标题 = 正确答案 .如果真 (x = 1) .计次循环首 (3, n) a = 取随机数 (1, ) 跳到 (a) 单选框 [n + 1].标题 = 读 (“答案”) .计次循环尾 () .如果真结束 .如果真 (x = 2) a = 取随机数 (1, ) 跳到 (a) 单选框 [1].标题 = 读 (“答案”) .计次循环首 (2, n) a = 取随机数 (1, ) 跳到 (a) 单选框 [n + 2].标题 = 读 (“答案”) .计次循环尾 () .如果真结束 .如果真 (x = 3) .计次循环首 (2, n) a = 取随机数 (1, ) 跳到 (a) 单选框 [n].标题 = 读 (“答案”) .计次循环尾 () a = 取随机数 (1, ) 跳到 (a) 单选框 [4].标题 = 读 (“答案”) .如果真结束 .如果真 (x = 4) .计次循环首 (3, n) a = 取随机数 (1, ) 跳到 (a) 单选框 [n].标题 = 读 (“答案”) .计次循环尾 () .如果真结束 ' 这样写不完美, 会有可能出现重复的答案。其实直接也可以用一个大的循环全部循环、
LiveData 面试题库、解答、地图源码图源码分析
LivaData 的面试题库与解答、源码分析 作者:唐子玄1. LiveData 如何感知生命周期的变化?
LiveData 在常规的观察者模式上附加了条件,若生命周期未达标,即使数据发生变化也不通知观察者。这通过 Lifecycle 实现,Lifecycle 是生命周期对应的类,提供了添加/移除生命周期观察者的方法,并定义了全部生命周期的状态及对应事件。要观察生命周期,源码大全视频需要实现 LifecycleEventObserver 接口,并注册给 Lifecycle。除了生命周期观察者外,还有数据观察者,数据观察者会与 LifecycleOwner 进行绑定。2. LiveData 是如何避免内存泄漏的?
内存泄漏是因为长生命周期的对象持有了短生命周期对象。在观察 LiveData 数据的代码中,Observer 作为界面的匿名内部类,它会持有界面的scada web 源码引用,同时 Observer 被 LiveData 持有,LivData 被 ViewModel 持有,而 ViewModel 的生命周期比 Activity 长。最终的持有链导致内存泄漏。LiveData 帮助避免内存泄漏,在内部 Observer 会被包装成 LifecycleBoundObserver,这实现了生命周期感知能力,同时它还持有了数据观察者,具备了数据观察能力。3. LiveData 是粘性的吗?若是,它是怎么做到的?
是的,LiveData 是粘性的。数据是持久的,意味着它不会因被消费而消失。当 LiveData 值更新时,会通知所有观察者。这一过程通过一个 Map 结构保存了所有观察者,并通过遍历 Map 并逐个调用 considerNotify() 方法实现。观察者会被包装在 LifecycleBoundObserver 中,它具备了生命周期感知能力,同时持有了数据观察者。当组件生命周期发生变化时,会尝试将最新值分发给该数据观察者。4. 粘性的 LiveData 会造成什么问题?怎么解决?
粘性的 LiveData 可能导致数据重复消费或消费逻辑混乱。解决方案包括使用带消费记录的值、带有最新版本号的观察者、SingleLiveEvent 等。其中,使用 SingleLiveEvent 可以根据数据的分类(暂态数据或非暂态数据)来选择性地利用或避免粘性。5. 什么情况下 LiveData 会丢失数据?
在高频数据更新的场景下使用 LiveData.postValue() 时,如果在这次调用和下次调用之间再次调用 postValue(),则会导致数据丢失,因为值先被缓存,再向主线程抛出分发值的任务。这与 LiveData 的设计和更新机制有关。6. 在 Fragment 中使用 LiveData 需注意些什么?
在 Fragment 中使用 LiveData 时,应当使用 viewLifecycleOwner 而非 this。避免因生命周期不一致导致的额外订阅者问题。使用 SingleLiveEvent 可以解决数据重复消费问题。7. 如何变换 LiveData 数据及注意事项?
androidx.lifecycle.Transformations 提供了变换 LiveData 数据的方法,如 map()。需要注意数据变换操作应避免阻塞主线程,可使用 CoroutineLiveData 来异步化数据变换。