知者行之始,行者知之成
2023-05-19 · 阅读 7071 · 字数 285
根据具体的场景和需求选择合适的调度器非常重要,这样可以更好地平衡应用的性能和用户体验。 Dispatchers 有哪些值 Dispatchers.Main:Android 主线程。用于调用 suspend 函数,UI 框架操作,及更新 LiveData 对象。 Dispatchers.IO:非主线程。用于磁盘操作(例如,Room 操作),及网络 I/O 请求(例如,调用服务器 API)。 Dispatchers.Default:非主线程,用于 CPU 密集型操作。例如,list 排序,及 JSON 解析。对于长时间运行的计算密集型操作,将其放在 Dispatchers.Main 调度器中会阻 ...
2021-02-06 · 阅读 10458 · 字数 239
Android 4.1.2 测试 Android Room 的使用,在 coroutine 中调用 Room.databaseBuilder 时,报错 AppDatabase_Impl does not exist Google 了半天没有头绪,这个报错也太抽象了。最后在参考了 Room 官方文档之后, 才发现是 gradle 的配置问题。 解决方法 修改 app gradle.build 的配置,增加 plugin kotlin-kapt,如下: plugins { id 'com.android.application' id 'kotlin-android' ...
2022-11-25 · 阅读 4400 · 字数 273
概述 在 activity 中监听 ViewModel 中数据的变化,当有变化时,将对应的数据显示在界面组件上 LiveData 在 ViewModel 中使用,上面监听的数据类型就是 LiveData 类型。 同时可用于 Activity 及 Fragment 间的数据共享 使用逻辑 在 activity 内新建一个 ViewModel,监听数据变化 当有数据变化时,在回调中,更新 UI View 的展示 ViewModel 内部则类似微信小程序的 data,里面定义一堆变量,监听的就是这些变量的变化,然后通过 postValue, setValue 这种类似小程序 setData 的 ...
2021-02-07 · 阅读 10239 · 字数 642
在看 Android Room 的示例代码时,看到一些 DAO 中的操作函数前有 suspend 关键字。例如: @Query("DELETE FROM word_table") suspend fun deleteAll() suspend 函数是 kotlin coroutine 引入的一个概念。 中文翻译 suspend, 中文意思是:挂起、推迟、悬浮。 suspend 是为解决什么问题而生 App 在发起网络请求拉取数据的同时,需要能保证用户在界面上的操作也能正常响应,界面可以刷新。 所以,就需要一套机制能保证耗时的 IO 操作,能与 UI 刷新操作同步执行。即, ...
2021-02-03 · 阅读 3537 · 字数 321
使用场景,例如,点击按钮获取输入框的内容。就需要写一堆 findViewById 的代码。 Android Studio 3.6 之后,可以使用 View Binding 来简化这个操作。 而且在绝大部分场景下,view binding 可以替代 findViewById。 修改 build.gradle 启用 view binding 编辑 Module build.gradle 的 android section, 添加 buildFeatures { viewBinding = true } 然后,点击编辑区域顶部的 Sync Now 来更新 gradle 配置。 这样就可以在 ac ...
2021-02-02 · 阅读 7176 · 字数 162
使用 tampermonkey 在当前网页中添加了一个按钮,用于手动触发自动化逻辑。 <button id="tm_btn" onclick="do_something()">开始抢购</button> do_something 函数,是我在 tampermonkey 脚本中定义的函数。 但是,点击按钮之后,报错: Uncaught ReferenceError: do_something is not defined at HTMLButtonElement.onclick 为何会找不到函数定义 原因是,tamper ...
2021-01-31 · 阅读 4242 · 字数 309
使用 Android Studio 的 Basic Activity 模板创建了新项目。 Basic Activity 内置了: 一个底部 FAB 按钮 两个 fragment 可以相互切换 但是,我想实现的交互效果是: 点击 FAB 按钮,由第一个 fragment 切换到第二个。 实现代码 第一个 fragment 的 onViewCreated 尾部添加 activity?.findViewById<FloatingActionButton>(R.id.fab)?.apply { show() setOnClickListener { findNavControl ...
2021-01-30 · 阅读 5591 · 字数 431
application/octet-stream 版本的缺陷: 无法增加多余参数。例如,我想顺便传递用户名,就没法增加字段了 搜了半天没找到 Spring Boot 读取 application/octet-stream 的实现。。。 所以干脆想尝试 multipart/form-data 版。 Java Spring Boot 如何获取 application/octet-stream 二进制数据 { "timestamp": "Feb 1, 2021, 03:18:55 PM", "status": 415, ...
2021-01-30 · 阅读 7522 · 字数 800
例如,我想将 https://www.sunzhongwei.com 网页中下载到的 Excel 文件,上传到其他服务器。这里以 http://localhost:5000 为本地测试环境。 tampermonkey 中是否可以使用 fetch / jQuery ajax 还是必须使用 GM_xmlhttpRequest ? 测试了一下,用 fetch 确实不行,必须使用 GM_xmlhttpRequest 。 以下是使用 fetch 的报错信息,估计使用 jquery ajax 也是同样的结果。 Access to fetch at 'http://localhost:5000/' from ...
2021-01-31 · 阅读 22286 · 字数 569
在 tampermonkey 的很多实际使用场景中,需要在模拟点击之后,等待界面变化,或者数据返回,此时就需要用到 setTimeout。但是如果是一系列的点击等待,就需要进行 setTimeout 嵌套,或者 setTimeout 时间进行倍数增长,代码可读性非常低。 所以,我想找一种 setTimeout 同步的写法,以提高代码的可维护性。 测试代码 (function() { 'use strict'; function wait(ms) { return new Promise((resolve, reject) => { ...
2021-01-29 · 阅读 6145 · 字数 174
由于我习惯 git 管理代码,但是提交公司代码仓库时必须使用 SVN,所以做了个简单的同步。 同步脚本 实际上就是一行 rsync 命令。 rsync --verbose --progress --stats --compress \ --recursive --times --perms --links --delete \ --exclude "*.bak" --exclude "*~" --exclude "*.swp" --exclude='.git/' \ /home/zhongwei/ ...
2021-01-27 · 阅读 5443 · 字数 160
由于 58 同城的开放平台申请接口权限一直处于审核中,而想要用的一个接口没有使用文档,也无法联系到人类客服询问,只能采取浏览器插件的方式做数据导出。 58同城管理后台为了防爬虫,做了诸多的防爬策略,其中一种就是没有明确的 class 和 id。 例如,管理后台的全选按钮: <span class="t-g-checkbox-font">全选</span> class 选择的话符合条件的很多。只能通过 inner text 来匹配。 解决方法 Array.from(document.querySelectorAll('span.t-g-checkbo ...
| 生活 | 跑步 清单 足球 鲁班 探索 孤独的美食家 驾驶 电视剧 收纳 奶爸 健康 game 电影 周末 joke |
|---|---|
| Geek | 健身 Laravel Git Vim MySQL Linux UI Windows SVN 纪录片 管理 Shell 游记 工具 手机 BackboneJS 自建博客 Mac DNS Tornado CDN Django Python AngularJS 理财 前端 Nginx 爬虫 Redis Javascript Browser 浏览器 推广 OAuth CSS PHP Social Networks 安全 运维 创业 杂记 VueJS Android Image IDE Java ReactJS 数据分析 SQLite RESTful 读书笔记 家电 ecshop Vagrant wordpress docker SEO GTD magento mongodb nodejs weex 冷知识 ruby iOS 微信小程序 AI CMS 快应用 backpack 广告联盟 OA 短信 UWP Win CSharp Tampermonkey graphviz 钉钉 WPS 数据字典 微信公众号 Fuchsia Adobe XD SQL Server thinkphp 代码规范 商业模式 Flutter 头痛的问题 serverless 视频制作 国际化 golang 服务器 Kotlin 网站建设 5G 笔记本 图片 spark spring 物联网 InfluxDB 图像识别 postgre rust 提示词 |
| 成长的烦恼 | 闲言碎语 待产 不睡觉 写作 程序员 孙心然语录 原则 大鸿语录 |
| 地球 | 植物 时间 中文 赚钱 国家地理 烟台 一生伏首拜阳明 emoji 弟子规 英文 国际贸易 |