【问题标题】:How to load a lot of files from assets asynchronously?如何从资产中异步加载大量文件?
【发布时间】:2016-03-09 01:50:58
【问题描述】:

我知道它有类似的主题。但是在每个主题中,我们在任务运行之前打开InputStream,并在新的线程中加载数据。但我有 90 个资产文件。这是创建 90 AsyncTask 的单一方法吗?我可以在inBackground() 方法中访问主线程以获取资产并打开新的InputStream 吗?就我而言,如果我要创建 90 个任务,我还需要同步它们的启动和完成顺序。我需要一个同步点,我的AsyncTask 将等待主线程。

【问题讨论】:

    标签: android android-asynctask android-assets


    【解决方案1】:

    我的建议是有一个带有 ThreadPool 执行器的服务并在那里进行加载,你可以让一堆线程并行运行来进行阅读。完成后,您可以回调您的活动,您可以使用广播或带有回调的活页夹接口。

    另一种选择是使用 setRetaininstance(true) 设置片段,并使用 AsyncTasks 或线程池执行器执行此操作。

    但不要在具有异步任务的活动中执行此操作,如果用户旋转设备,您可能会运行 90 个任务,并且没有活动可以返回结果。

    【讨论】:

    • 谢谢!我同意这是最好的方法!但我只需要应用程序才能在演示文稿中显示。因此,设备不会旋转(它是桌面)。对我来说,尽快完成它很重要。在演示之前我还有一点时间。
    • 我认为可以使用publishProgressonUpdateProgress 中打开新的InputStream 并在inBackground 中检查一些标志。我知道这是一种 hack,但我无法从最快的方式中找到更好的方法
    • 当然,在无限循环中检查标志是非常肮脏的方式,但工作稳定:)
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2017-10-23
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多