Code Monkey home page Code Monkey logo

Comments (15)

ssseasonnn avatar ssseasonnn commented on June 30, 2024

报什么错?问问题的时候能不能描述清楚一点呀?起码你得把报错信息贴出来吧

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

我看你的demo里监听状态都是传的lifecycleowner 所以我想问一下退出当前Activity或者Fragment后能否继续监听下载状态
val item = adapter.getItem(position)
val downloadTask = GlobalScope.download(
checkHttpUrl(item.url),
item.name,
"$DEFAULT_SAVE_PATH/map"
)
downloadTask.start()
我使用GlobalScope线程开启下载任务时,退出了当前fragment之后下载任务就停止了

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

你用GlobalScope去下载,页面销毁仍然会继续下载,但是进度监听肯定是跟你页面生命周期绑定的,不然页面销毁了还继续监听下载进度更新UI,不就内存泄露了吗?

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

所以你的目的是什么?你能描述一下你的业务场景吗?

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

不是 我是说页面销毁后下载任务就停止了

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

不会的,使用GlobalScope,页面销毁下载不会停止

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

demo中有一个TestActivity,你可以打开它验证一下,点击开始下载后退出TestActivity,等待一段时间后你可以看到下载目录中的下载文件

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

之前确实是我代码的问题导致页面销毁停止,但是我还有个问题为什么你的demo源码中onAttach绑定的downloadTask的对象与button点击事件的downloadTask对象是同一个? 点击button的时候按照你的代码不是应该会new一个全新的对象吗
onAttach {
val downloadTask = GlobalScope.download(data.apkUrl)

                data.progressJob?.cancel()
                data.progressJob = downloadTask.state()
                    .onEach {
                        itemBinding.button.setState(it)
                        Log.e("========downloadTask","$downloadTask")
                        Log.e("========data","$data")
                    }
                    .launchIn(lifecycleScope)
            }

itemBinding.button.setOnClickListener {
val downloadTask = GlobalScope.download(data.apkUrl)
Log.e("========downloadStart","$downloadTask")
when {
downloadTask.isSucceed() -> {
installApk(downloadTask.file()!!)
}
downloadTask.isStarted() -> {
downloadTask.stop()
}
else -> {
downloadTask.start()
Log.e("========data","$data")
}
}
}

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

会根据url来判断是不是同一个下载任务,如果url相同,则不会创建新的task

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

你代码怎么写的?贴出来看看

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

offlineMapAdapter.setOnItemChildClickListener { adapter, view, position ->
if (view.id == R.id.iv_download) {
val item = adapter.getItem(position) as Item
val downloadTask = GlobalScope.download(
checkHttpUrl(item.url),
item.name,
"$DEFAULT_SAVE_PATH/map"
)
L.d("========url:${checkHttpUrl(item.url)}")
L.d("========downLoadTask:$downloadTask")
when {
downloadTask.isSucceed() -> {

                }

                downloadTask.isStarted() -> {
                    downloadTask.stop()
                }
                else -> {
                    downLoadService()
                    downloadTask.start()
                }
            }
        }
    }

from downloadx.

ssseasonnn avatar ssseasonnn commented on June 30, 2024

你断点调试一下呢,没看出有啥问题 😂

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

private val taskMap = ConcurrentHashMap<String, DownloadTask>()我每次点击的时候这个map的size都是0

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

按理说我第一次初始化的时候就创建了所有的downloadTask 但是每次调用这个downloadConfig.taskManager.add(task)方法时 这个map的size都是空的

from downloadx.

Travellingpoet avatar Travellingpoet commented on June 30, 2024

找到问题了😂 DefaultTaskManager这个manager应该是是静态的object 我看你代码里写的是class

from downloadx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.