android按钮透明效果 android颜色透明度怎么设置( 三 )


4.Anko SQLite: a query DSL and parser collection for Android SQLite;
Anko SQLite是一个查询解析SQLite的领域专用语言
SQLite 存在的不足:
过多需要实现的模板代码;通过字符串实现 SQL 命令,容易出错,且编译时无法检查;每次需要手动关闭数据库;线程和同步访问的问题;
随着你应用的数据库越来越复杂,暴露出来的问题也会越多 。所以也难怪很多人会选择 ORM 或者 NoSQL,但这带来的方便性是以增加应用大小和方法数为代价的 。
如果你打算使用 Kotlin 来开发 Android 应用,那么现在通过 Anko SQLite 就可以很方便的进行 SQLite 操作了 。比如可以告别麻烦的 Cursor 和 ContentValue、内置安全机制,保证数据库在执行所有代码后能够关闭 。
通过继承 ManagedSQLiteOpenHelper 类来实现数据库帮助类,推荐做法就是按照官方的实现:
class DatabaseHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, \\”LibraryDatabase\\”, null, 1) {companion object {private var instance: DatabaseHelper? = null
@Synchronizedfun Instance(context: Context): DatabaseHelper {if (instance == null) {instance = DatabaseHelper(context.applicationContext)}return instance!!}}
override fun onCreate(database: SQLiteDatabase) {createTable(Book.TABLE_NAME, true, Book.COLUMN_ID to INTEGER + PRIMARY_KEY, Book.COLUMN_TITLE to TEXT, Book.COLUMN_AUTHOR to TEXT)}
override fun onUpgrade(database: SQLiteDatabase, oldVersion: Int, newVersion: Int) {dropTable(Book.TABLE_NAME, true)}}
访问数据库的推荐做法是通过依赖注入,或者为 Context 添加一个 extension:
val Context.database: DatabaseHelperget() = DatabaseHelper.Instance(applicationContext)
下面这是一个简单的 model 类:
data class Book(val id: Int, val title: String, val author: String) {companion object {val Book.COLUMN_ID = \\”id\\”val TABLE_NAME = \\”books\\”val COLUMN_TITLE = \\”title\\”val COLUMN_AUTHOR = \\”author\\”}}
当数据库准备好后,就可以通过 use 方法来进行操作了 。比如:
database.use {insert(Book.TABLE_NAME, Book.COLUMN_ID to 1, Book.COLUMN_TITLE to \\”2666\\”, Book.COLUMN_AUTHOR to \\”Roberto Bolano\\”)}
最后,让我们来比较一下常见库的大小:
要注意这里 Anko SQLite 的依赖大小其实是包含了 Kotlin Runtim (method count: 6298, DEX size: 1117 KB) 和 Anko Commons module (method count: 982, DEX size: 174 KB) 的 。因此如果你是通过 Kotlin 来开发,Anko SQLite 增加的大小其实并没有图表显示得那么多 。
因此,如果你在使用 Kotlin 做开发并且数据库的复杂度不高,首推 Anko SQLite 。但如果数据库结构非常复杂,DAO 和 SQL 查询可能会变得很痛苦,这时候 ORM 和 NoSQL 就是首选方案了 。
5.Anko Coroutines: utilities based on the kotlinx.coroutines library.
Kotlin协程协程本质上是一个轻量级的线程,支持我们用同步写法写异步请求,而不用Callback 。
doAsync(UI) {val data: Deferred = bg {// Runs in backgroundgetData()}
// This code is executed on the UI threadshowData(data.await())}
我们可以用bg()在新的线程去做耗时操作,等返回结果再在UI线程进行操作 。
具体协程教程我们可以看一下官方文档
Kotlin协程
6.总结
Anko是Kotlin官方开发的一个让开发Android应用更快速更简单的Kotlin库,并且能让我们书写的代码更简单清楚更容易阅读 。主要包含了以下几个部分 。
Anko Commons: a lightweight library full of helpers for intents, dialogs, logging and so on;Anko Layouts: a fast and type-safe way to write dynamic Android layouts;Anko SQLite: a query DSL and parser collection for Android SQLite;Anko Coroutines: utilities based on the kotlinx.coroutines library.
Anko库用起来非常的简单方便,里面设计到DSL和扩展函数 。