前言
Kotlin 中有很多內(nèi)置的擴(kuò)展函數(shù)翩瓜,非常好用跨扮,可以代替很多需要封裝的Java工具類,本文主在列舉一些發(fā)現(xiàn)的好用擴(kuò)展函數(shù)验毡;
本文也會(huì)不斷維護(hù)衡创,大佬們有新的擴(kuò)展函數(shù),或者自己寫的感覺好用擴(kuò)展函數(shù)也可以加進(jìn)來晶通;
日志打印
internal const val DEBUG = true
internal const val TAG = "shuxin.wei"
fun Any?.logI(tag: String = TAG, debug: Boolean = true) {
if (DEBUG && debug) {
Log.i(tag, this.toString())
}
}
fun Any?.logD(tag: String = TAG, debug: Boolean = true) {
if (DEBUG && debug) {
Log.d(tag, this.toString())
}
}
fun Any?.logE(tag: String = TAG, debug: Boolean = true) {
if (DEBUG && debug) {
Log.e(tag, this.toString())
}
}
fun Any?.logW(tag: String = TAG, debug: Boolean = true) {
if (DEBUG && debug) {
Log.w(tag, this.toString())
}
}
fun Any?.logP(tag: String = TAG, debug: Boolean = true) {
if (DEBUG && debug) {
println("$tag : $this")
}
}
fun printThread(tag: String = TAG) {
"$tag: ThreadName:${Thread.currentThread().name} ThreadId: ${Thread.currentThread().id}".logD(tag)
}
異步
- 簡(jiǎn)介
可以在Activity璃氢、Fragment、Context上下文中方便線程切換狮辽,以及處理了可能發(fā)生的內(nèi)存泄漏一也;
Boolean返回值表示是否執(zhí)行了傳入的函數(shù)巢寡;
將這段代碼粘貼到AS中就可以看見入?yún)⒑蜕舷挛模?br> 文件地址:https://github.com/Kotlin/anko
class CoroutinesActivity : AppCompatActivity() {
val doAsync: Future<Unit> = "test".doAsync {
val get: String? = this.weakRef.get()
printThread(get ?: "test")
"test"
}
val doAsyncResult: Future<String> = "test".doAsyncResult {
val get: String? = this.weakRef.get()
printThread(get ?: "")
return@doAsyncResult "test"
}
val activityUiThread: Boolean = AnkoAsyncContext(WeakReference(this@CoroutinesActivity)).activityUiThread {
}
baseContext.runOnUiThread {
}
val uiThread: Boolean = AnkoAsyncContext(WeakReference("test")).uiThread {
}
val activityUiThreadWithContext: Boolean = AnkoAsyncContext(WeakReference(this@CoroutinesActivity)).activityUiThreadWithContext {
}
val ankoContext = AnkoContext.create(this@CoroutinesActivity, this@CoroutinesActivity)
val activityUiThread1: Boolean = AnkoAsyncContext(WeakReference(ankoContext)).activityUiThread {
}
val activityUiThreadWithContext1: Boolean = AnkoAsyncContext(WeakReference(ankoContext)).activityUiThreadWithContext {
}
Fragment().runOnUiThread {
}
val supportFragmentUiThread:Boolean = AnkoAsyncContext(WeakReference(Fragment())).supportFragmentUiThread {
}
}