Android LoaderManager AsyncTaskLoader,Kotlin(4)

Android LoaderManager AsyncTaskLoader,Kotlin(4)

Kotlin 复制代码
import android.content.Context
import androidx.loader.app.LoaderManager
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.loader.content.AsyncTaskLoader
import androidx.loader.content.Loader


class MainActivity : AppCompatActivity() {
    companion object {
        const val TAG = "fly"
    }

    private val loaderId = 2024
    private var manager: LoaderManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val ctx = this
        manager = LoaderManager.getInstance(this)
        manager?.initLoader(loaderId, Bundle(), object : LoaderManager.LoaderCallbacks<MyData> {
            override fun onCreateLoader(id: Int, args: Bundle?): Loader<MyData> {
                val loader = MyLoader(ctx)
                Log.d(TAG, "onCreateLoader ${loader.id}")
                return loader
            }

            override fun onLoaderReset(loader: Loader<MyData>) {
                Log.d(TAG, "onLoaderReset ${loader.id}")
            }

            override fun onLoadFinished(loader: Loader<MyData>, data: MyData?) {
                Log.d(TAG, "onLoadFinished ${loader.id} $data")
            }
        })
    }

    override fun onPause() {
        super.onPause()
        //触发 loadInBackground()
        manager?.getLoader<MyData>(loaderId)?.onContentChanged()
    }

    class MyLoader(ctx: Context) : AsyncTaskLoader<MyData>(ctx) {
        override fun onContentChanged() {
            super.onContentChanged()
            Log.d(TAG, "onContentChanged")
        }

        override fun onStartLoading() {
            super.onStartLoading()
            Log.d(TAG, "onStartLoading")
        }

        override fun forceLoad() {
            super.forceLoad()
            Log.d(TAG, "forceLoad")
        }

        override fun loadInBackground(): MyData {
            var d = MyData("${System.currentTimeMillis()}")
            Log.d(TAG, "loadInBackground @ ${d.value}")
            return d
        }

        //工作在主线程。data是loadInBackground()返回的值。
        override fun deliverResult(data: MyData?) {
            super.deliverResult(data)
            Log.d(TAG, "deliverResult ${data?.value}")
        }
    }

    data class MyData(val value: String)
}

启动后:

D onCreateLoader 0

D onStartLoading

按home键,把应用切入后台不可见:

D forceLoad

D onContentChanged

D loadInBackground @ 1729932886262

D onLoadFinished 2024 MyData(value=1729932886262)

D deliverResult 1729932886262

Android LoaderManager AsyncTaskLoader Kotlin(3)-CSDN博客文章浏览阅读774次,点赞5次,收藏24次。android LoaderManager与AsyncTaskLoader,java(1)_zhangphil的博客-CSDN博客。android LoaderManager与AsyncTaskLoader,java(1)_android loadermanager 和 asynctaskloader。android LoaderManager与AsyncTaskLoader,java(1)_android loadermanager 和 asynctaskloader-CSDN博客。https://zhangphil.blog.csdn.net/article/details/143291905

相关推荐
susu10830189112 小时前
Android Studio打包APK
android·ide·android studio
2401_897907863 小时前
Android 存储进化:分区存储
android
Dwyane0310 小时前
Android实战经验篇-AndroidScrcpyClient投屏一
android
FlyingWDX10 小时前
Android 拖转改变视图高度
android
_可乐无糖10 小时前
Appium 检查安装的驱动
android·ui·ios·appium·自动化
一名技术极客12 小时前
Python 进阶 - Excel 基本操作
android·python·excel
我是大佬的大佬13 小时前
在Android Studio中如何实现综合实验MP3播放器(保姆级教程)
android·ide·android studio
lichong95113 小时前
【Flutter&Dart】MVVM(Model-View-ViewModel)架构模式例子-http版本(30 /100)
android·flutter·http·架构·postman·win·smartapi
刘争Stanley13 小时前
Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
android·linux·运维·内核·镜像·gki·kmi
五味香13 小时前
Java学习,List截取
android·java·开发语言·python·学习·golang·kotlin