بنقرة واحدة
dev-learning-record
开发学习记录生成器。每次添加新功能或修改代码后,从Kotlin语法、Android架构、UI开发、数据库等角度分析学习点,生成结构化的学习文档。适用于代码学习、知识总结、开发复盘场景。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
开发学习记录生成器。每次添加新功能或修改代码后,从Kotlin语法、Android架构、UI开发、数据库等角度分析学习点,生成结构化的学习文档。适用于代码学习、知识总结、开发复盘场景。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
通过对比 entities、schema JSON 和迁移方案,诊断并修复 Android Room 数据库在 entity 或 database 变更后的 schema 校验崩溃;增加数据库版本号,添加重命名/新增/删除列的迁移,并验证生成的 Room 代码。
优化Markdown文件中的ASCII流程图,使其更适合手机显示。将宽大的ASCII边框图转换为紧凑的树形结构。当用户要求修复流程图在手机上的显示问题时调用。
分析 Compose 界面是否使用了项目中可复用的组件和主题系统。适用于检查 Compose 屏幕是否符合项目规范或需要重构以使用共享组件。
检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。
Legado Plus 模块学习讲解器。当用户想学习某个模块、询问模块功能、请求讲解代码架构时调用。提供生动详尽的模块讲解,包括架构图、代码走读、实践任务。
Critical Android code review for Payoo Android app. Focuses on high-impact issues - naming conventions, memory leaks, UIState patterns, business logic placement, lifecycle management, and MVI/MVVM pattern violations. Use when reviewing Kotlin files, pull requests, or checking ViewModels, Activities, Fragments, UseCases, and Repositories.
| name | dev-learning-record |
| description | 开发学习记录生成器。每次添加新功能或修改代码后,从Kotlin语法、Android架构、UI开发、数据库等角度分析学习点,生成结构化的学习文档。适用于代码学习、知识总结、开发复盘场景。 |
帮助Kotlin和Android开发初学者理解每次代码修改背后的知识点。
分析涉及的Kotlin语法知识:
| 语法特性 | 说明 | 示例 |
|---|---|---|
| 数据类 | data class 自动生成equals/hashCode/toString | data class UrlRecord(...) |
| 密封类 | sealed class 限制继承层次,用于状态管理 | sealed class UIState |
| 扩展函数 | 为现有类添加新方法 | fun Context.toast() |
| 高阶函数 | 函数作为参数或返回值 | collect { } |
| 协程 | 异步编程 | viewModelScope.launch { } |
| Flow | 响应式数据流 | flowAll(): Flow<List<T>> |
| 空安全 | ?、?.、?:、!! 操作符 | record.sourceName?.let { } |
| 属性委托 | by lazy、by viewModels | val viewModel by viewModels() |
| 单例对象 | object 声明单例 | object UrlRecordInterceptor |
分析架构模式和组件使用:
| 架构概念 | 说明 | 本项目应用 |
|---|---|---|
| MVVM | Model-View-ViewModel架构 | Activity观察ViewModel状态 |
| 单向数据流 | StateFlow驱动UI | _uiState -> uiState |
| Repository模式 | 数据访问抽象层 | appDb.urlRecordDao |
| 依赖注入 | Hilt/Koin管理依赖 | by viewModels() |
| 生命周期感知 | Lifecycle-aware组件 | lifecycleScope.launch |
分析界面开发技术:
| UI技术 | 说明 | 示例 |
|---|---|---|
| ViewBinding | 视图绑定,替代findViewById | ActivityUrlRecordBinding |
| RecyclerView | 列表展示 | UrlRecordAdapter |
| SearchView | 搜索框组件 | OnQueryTextListener |
| Menu | 菜单系统 | onCreateOptionsMenu |
| Dialog | 对话框 | alert { } |
分析Room数据库使用:
| Room组件 | 说明 | 示例 |
|---|---|---|
| Entity | 实体类,对应表 | @Entity tableName = "url_records" |
| DAO | 数据访问对象 | @Dao interface UrlRecordDao |
| Database | 数据库类 | @Database version = 93 |
| Migration | 数据库迁移 | AutoMigration 92→93 |
| Flow查询 | 响应式查询 | fun flowAll(): Flow<List<T>> |
分析网络请求相关:
| 网络组件 | 说明 | 示例 |
|---|---|---|
| OkHttp | HTTP客户端 | OkHttpClient |
| Interceptor | 拦截器 | UrlRecordInterceptor |
| 协程异步 | 非阻塞请求 | scope.launch { } |
# 开发学习记录 - [功能名称]
## 📚 Kotlin语法学习
### [语法点1]
**代码示例**:
```kotlin
// 代码片段
知识点:
为什么这样写: 解释原因
...
...
...
| 本次学习 | 相关知识 | 扩展阅读 |
|---|---|---|
| ... | ... | ... |
## 示例:URL访问记录功能学习记录
### Kotlin语法学习
#### 1. sealed class(密封类)
```kotlin
sealed class UrlRecordUIState {
object Loading : UrlRecordUIState()
data class Success(val records: List<UrlRecord>) : UrlRecordUIState()
data class Error(val message: String) : UrlRecordUIState()
object Empty : UrlRecordUIState()
}
知识点:
when表达式可以穷举所有状态为什么用密封类: UI状态是有限的几种,用密封类可以确保类型安全,避免遗漏状态处理。
private val _uiState = MutableStateFlow<UrlRecordUIState>(UrlRecordUIState.Loading)
val uiState: StateFlow<UrlRecordUIState> = _uiState.asStateFlow()
知识点:
MutableStateFlow是可变的状态流asStateFlow()暴露为只读的StateFlow为什么这样写: 遵循单向数据流原则,ViewModel内部可修改,外部只能观察。
@Query("SELECT * FROM url_records ORDER BY timestamp DESC")
fun flowAll(): Flow<List<UrlRecord>>
知识点:
Flow类型collect持续观察数据变化与List的区别:
List:一次性查询,数据变化不会更新Flow:持续观察,数据变化自动更新View (Activity) ← 观察 ← ViewModel ← 查询 ← Model (DAO/Database)
│ │
└──── 用户事件 ────────┘
职责划分:
lifecycleScope.launch {
viewModel.uiState.collectLatest { state ->
// 更新UI
}
}
知识点:
lifecycleScope绑定Activity生命周期@Entity(tableName = "url_records", indices = [Index("timestamp"), Index("domain")])
data class UrlRecord(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val url: String,
val domain: String,
// ...
)
知识点:
@Entity定义表名@PrimaryKey定义主键indices创建索引加速查询@Database(
version = 93,
entities = [..., UrlRecord::class],
autoMigrations = [..., AutoMigration(from = 92, to = 93)]
)
知识点:
AutoMigration自动处理简单迁移override val binding by viewBinding(ActivityUrlRecordBinding::inflate)
知识点:
findViewByIdclass UrlRecordActivity : ..., SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String?): Boolean {
viewModel.setSearchQuery(newText)
return false
}
}
知识点:
OnQueryTextListener接口onQueryTextChange输入时触发false表示不消费事件