duangsuse::Echo
https://github.com/by-syk/SP 🤔 现在想起来,其实如果能进行快速的工程的话,就可以写出很多这种封装库。 可惜只有下周了,这周还有 BinaryStreamIO 和 SimpleCat SharedPreferences sharedPreferences = context.getSharedPreferences(context .getPackageName(), Context.MODE_PRIVATE); SharedPreferences.Editor editor…
GitHub
duangsuse-valid-projects/telegramscanner
Telegram Message stream scanner java library. Contribute to duangsuse-valid-projects/telegramscanner development by creating an account on GitHub.
duangsuse::Echo
https://github.com/by-syk/SP 🤔 现在想起来,其实如果能进行快速的工程的话,就可以写出很多这种封装库。 可惜只有下周了,这周还有 BinaryStreamIO 和 SimpleCat SharedPreferences sharedPreferences = context.getSharedPreferences(context .getPackageName(), Context.MODE_PRIVATE); SharedPreferences.Editor editor…
总的来说,PreferencePrxoy 要有以下方法(类似,因为要有特殊类型的重载):
== Read
不打算提供其他的函数式接口,存储方式可能是 Java serializable
== Read
PreferencePrxoy#get(String):Any== Create
PreferencePrxoy#contains(String):Boolean
PreferenceTransactionBuilder#make(String, Any):PreferenceTransactionBuilder== Update
PreferenceTransactionBuilder#ensure(String, Any):PreferenceTransactionBuilder
PreferenceProxy#set(String, Any):Unit== Delete
PreferenceTransactionBuilder#update(String, Any):PreferenceTransactionBuilder
PreferenceProxy#put(String, Any):PreferenceProxy
PreferenceTransactionBuilder#purge(String):Unit
PreferenceProxy#delete(String):Any
PreferenceProxy#remove(String):PreferenceProxy
PreferenceProxy#destroy():Unit
最后,它要识别 interface 里的 Getter、Setter、Transaction interface,并且检查附属的 annotation(对于整个 Preference,要指定名称和可见性以及属性命名方式,对于字段可能要指定自己的属性名、存储方式)不打算提供其他的函数式接口,存储方式可能是 Java serializable
ObjectOutputStream + Base64 或者 JSON
为了使得库接口更加可移植,使用的 Preference 必须只是一个接口(能完成提供 API 的),实际实现使用 Delegate,这样可以兼容更多的底层存储系统Forwarded from Rachel 碎碎念 (Rachel Miracle.)
Telegram
IT 那点事
It seems like the system server breaks down...
Forwarded from 芝士和培根
Gityuan
Gityuan博客 | 袁辉辉的技术博客
袁辉辉, Gityuan, Android博客, Android源码, Flutter博客,Flutter源码
Forwarded from Rachel 碎碎念 (Rachel Miracle.)
Telegram
IT 那点事
It seems like the system server breaks down...
zygote 炸掉了无法启动,大概就是卡 bootanimation... 🤔
不过明显 ADB 服务还是正常启动
之前是 hardware base services 爆炸了,应该是并发问题(libc 说是 freed mutex used)
不知道 bootanimation 依不依赖 surfaceflinger
哦好像不仅仅是依赖,如果 surfaceflinger 失败了 bootanimation 根本不会启动
我对 Andorid 底层系统和 UNIX 并发编程、异步 IO 还是不了解(跑
肯定的。而且我连应用层都是还在学
不过明显 ADB 服务还是正常启动
之前是 hardware base services 爆炸了,应该是并发问题(libc 说是 freed mutex used)
不知道 bootanimation 依不依赖 surfaceflinger
哦好像不仅仅是依赖,如果 surfaceflinger 失败了 bootanimation 根本不会启动
我对 Andorid 底层系统和 UNIX 并发编程、异步 IO 还是不了解(跑
肯定的。而且我连应用层都是还在学
简书
Android中的SurfaceFlinger和Choreographer
SurfaceFlinger和Choreographer是构成Android图形系统的主要部分,它们都是VSYNC信号的订阅者;SurfaceFlinger将接受到的不同数据...
duangsuse::Echo
zygote 炸掉了无法启动,大概就是卡 bootanimation... 🤔 不过明显 ADB 服务还是正常启动 之前是 hardware base services 爆炸了,应该是并发问题(libc 说是 freed mutex used) 不知道 bootanimation 依不依赖 surfaceflinger 哦好像不仅仅是依赖,如果 surfaceflinger 失败了 bootanimation 根本不会启动 我对 Andorid 底层系统和 UNIX 并发编程、异步 IO 还是不了解(跑…
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse 应该开始写 C++, Android 好喜欢使用智能指针啊,都是 sp wp up ?
duangsuse::Echo
那么,完成这程序需要的一些信息: #Kotlin #tools #project — Regex 正则表达式匹配 group 新消息的 Regex /^(.+), \[(\d{2})\.(\d{2})\.(\d{2}) (\d{2}):(\d{2})\]$/ 对应数据:data class MessageHead(val channel: DisplayName, val date: Date) 新消息,reply to /^\[In reply to (.+)\]$/ 数据:data class R…
刚才写了一点实际非数据的代码,考虑了一下『InputStream 缓冲』的问题,以及啥是缓冲,没有难住我,太好了 🐱
duangsuse::Echo
🤔 想想 Scanner 是不是不够优雅...
我觉得就 Scanner 的逻辑结构上应该不够优雅,state 几乎是个笑话、lineDoUntil 非得加一个『keepLastLineOnce』才能用(doUntil 是在 scan body 里看到 new message header 的时候用的,可是等到这个 Message 返回,新 message 头会被下一次 iteration 直接忽视掉(因为我没设计好数据流,然后每次由判断 hasNext 的函数读新行的),导致漏掉偶数消息,不得不引入类似『mark/reset』的机制才可以),不过能用就好(跑路 🙈
duangsuse::Echo
telegramscanner.zip
最后写下 XML 序列化就彻底完成了!(因为这个最终是要用 Ruby 来查询数据的,虽然我有写 JavaFX GUI 的打算,可是我觉得还是晚一点好。
🤔 这是写 HTML 的节奏?虽然是 XML... 跑,反正都是 SGML 呢?(