问题标签 [asynctaskloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5342 浏览

android - Android - 线程池策略,可以用Loader来实现吗?

首先是问题:

  • 我正在开发FragmentLists 在自定义FragmentStatePagerAdapter. 可能存在大量此类片段,例如 20 到 40 个。
  • 每个片段都是一个列表,其中每个项目都可以包含文本或图像。
  • 图像需要从网络异步上传并缓存到临时内存缓存,如果可用,还可以缓存到 SD
  • 当 Fragment 离开屏幕时,应取消任何上传和当前活动(不暂停)

我的第一个实现遵循谷歌著名的图像加载器代码。我对该代码的问题是它基本上为AsyncTask每个图像创建一个实例。在我的情况下,这会很快杀死应用程序。

由于我使用的是 v4 兼容包,我认为使用扩展的自定义加载器AsyncTaskLoader会对我有所帮助,因为它在内部实现了一个线程池。但是令我不快的是,如果我多次执行此代码,则每次后续调用都会中断前一次。假设我的ListView#getView方法中有这个:

此方法在循环中针对进入视图的每个列表项执行。正如我所说 - 每个后续调用都将终止前一个。或者至少这就是基于 LogCat 发生的事情

然后我想也许给每个加载器提供唯一的 id 会有所帮助,但它似乎没有任何区别。结果,我最终得到了看似随机的图像,并且该应用程序甚至从未加载我需要的 1/4。

问题

  • 什么方法可以修复 Loader 做我想做的事情(有没有办法?)
  • 如果不是什么是创建AsyncTask池的好方法,是否有可能实现它?

为了让您了解这里的代码,这是 Loader 的精简版本,其中实际的下载/保存逻辑位于单独的 ImageManager 类中。

0 投票
7 回答
10788 浏览

android - AsyncTaskLoader 不运行

我想使用 Compatibility Package 在我的项目中实现 AsyncTaskLoader,所以我遵循了 Android Docs 中的 Loader 手册。

问题是 Loader 什么都不做,似乎loadInBackground()从来没有被调用过

知道我的代码有什么问题吗?(ExpandableListFragment扩展Fragment,但不覆盖任何关键方法)

谢谢 :-)

/**编辑:

我意识到(晚了,我是个白痴)AsyncTaskLoader 是一个抽象类,所以我需要对它进行子类化...... m(__)m 我留下这个问题,以防有人在我身后来到这里,谁知道......

0 投票
3 回答
1947 浏览

android - 对于执行的每个数据库操作的类型,活动或片段是否必须具有单独的加载器?

似乎 Google 推荐的片段或活动与 sqlite 数据库交互的方式(使用 android 支持库)是通过扩展 AsyncTaskLoader 的加载器,其工作方式类似于 CursorLoader 为 ContentProviders 所做的方式。

单个活动或片段可以以多种方式与数据库交互,更新、删除和查询一个或多个表中的数据。loadInBackground()但是由于加载器只有一个地方来执行数据库操作(即loadInBackground()在加载器构造函数的args参数通过LoaderManager.initLoader()?

非常感谢。

0 投票
0 回答
1290 浏览

android - 是否可以查明 LoaderManager 是否已完成所有 AsyncTaskLoaders 的加载?

我问的原因是因为我想在我的主 Activity 启动的任何 AsyncTask 正在运行时在 ActionBar 中显示一个 ProgressDialog 抖动器。

我当前的解决方案(半有效)扩展了 AsyncTaskLoader。在该类中,我重写了 onForceLoad() 方法并将加载器的 Id 和类名添加到在我的应用程序中管理的 Map(键入加载器 Id);当加载器添加到地图时,我会在操作栏中显示加载 throbber。每当调用 LoaderCallback 的 onLoadFinished 时,我都会使用 Id 从 Map 中删除 Loader,并检查 Map 是否为空。如果地图是空的,我将停止显示 laoding throbber。

我面临的问题是,例如,如果 5 个加载器正在运行并且用户单击刷新再次重新启动所有 5 个加载器,则不会调用所有加载器的 onLoadFinished。这会导致加载 throbber 无限期地显示,因为 Map 永远不会变空。我认为这可能与限制加载程序的方式有关,但我不确定。

0 投票
6 回答
10209 浏览

android - 从 AsyncTaskLoader 更新进度条?

使用 AsyncTaskLoader 时,您将如何更新显示状态的进度条,因为它正在更新?通常你会等待回调在完成后移除,但是如何运行更新呢?你会让主线程(ui)在设置数据时轮询数据吗?

编辑:我说的是AsyncTaskLoader,看看加载器部分。这是类的链接:http: //developer.android.com/reference/android/content/AsyncTaskLoader.html

我想使用它,因为它是未来 :),我知道如何使用 AsyncTask 来做到这一点。

0 投票
3 回答
754 浏览

android - 使用 AsyncTaskLoader 时出错

这是我的 FragmentListArraySupport.java

这是我的装载机:

我的清单是这样的:

错误:

可能是什么错误?

这是我处理片段以及使用没有太多文档或示例的 AsyncTaskLoaders 的快速时间。我的代码所做或应该做的只是打印一个字符串列表。我可以让他们改进。

我的代码有问题吗?在哪里?

0 投票
2 回答
1130 浏览

android - 用远程数据填充 ListFragment

我有一个 ListFragment,目前填充了静态数据,在编译时修复。我实际上希望从网络上截取列表的数据。

我打算使用jsoup进行检索和解析等。但是将 jsoup 链接到 ListFragment 的最佳方法是什么?

我应该使用 AsyncTaskLoader 之类的加载器吗?我不确定,因为 API 文档说加载器应该“监视数据源并在内容更改时提供新结果”,但是为我的 ListFragment 检索数据将是一次性操作:不需要来监控源。

任何建议将不胜感激。

0 投票
1 回答
2604 浏览

android - 带有 AsyncTaskLoader 的 Fragment 会影响其他 Fragment 附加到 Activity

我使用 AsyncTaskLoader 从数据库查询中加载游标。我遵循了 Android 开发者示例:http: //developer.android.com/reference/android/content/AsyncTaskLoader.html

但是不知何故,在此片段(使用加载器)之后添加到页面适配器的片段没有附加到活动,并且当它尝试使用需要活动的方法(如 getString())时,会抛出异常并说这个片段没有附加到任何活动。

这是一些代码:

  1. 将片段添加到页面适配器。

    /li>
  2. AsyncTaskLoader 实现:

    抽象公共类 AbstractCursorLoader 扩展 AsyncTaskLoader {

    /li>
  3. 初始化加载器:

    }

    /li>

我真的不知道为什么会这样。

PS我在评论中制作代码块时遇到了一些问题,我觉得它有一个错误,很抱歉。

在此先感谢,埃拉德。

0 投票
1 回答
1505 浏览

android - 应该如何在 AsyncTaskLoader 中处理 SQLiteDatabase 连接?

我想知道应该在何时何地在我的 AsyncTaskLoader 中打开/关闭我的 SQLiteDatabase 连接。我不觉得我完全理解 Loader 的生命周期,所以我担心如果我不这样做,我可能会遇到一些内存泄漏/NullPointerExceptions。我目前在加载程序的构造函数中打开了我的 SQLiteDatabase:

但是我在哪里再次关闭连接?

0 投票
5 回答
6337 浏览

android - 从 AsyncTaskLoader 更新 UI

我已经将我的转换AsyncTaskAsyncTaskLoader(主要是为了处理配置更改)。我有一个TextView我正在使用的进度状态,并正在使用onProgressUpdateAsyncTask来更新它。它看起来没有AsyncTaskLoader等价物,所以在loadInBackground(在AsyncTaskLoader)期间我正在使用这个:

我在 a 中使用它Fragment,这就是我使用getActivity(). 这工作得很好,除非发生配置更改,例如更改屏幕方向。我AsyncTaskLoader一直在运行(这就是我使用 的原因AsyncTaskLoader),但runOnUiThread似乎被跳过了。

不知道为什么会跳过它,或者这是否是从 AsyncTaskLoader.

更新:

我最终恢复到一个AsyncTask,因为它似乎更适合 UI 更新。希望他们可以将与 anAsyncTaskAsyncTaskLoader.