问题标签 [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.
android - Android - 线程池策略,可以用Loader来实现吗?
首先是问题:
- 我正在开发
FragmentLists
在自定义FragmentStatePagerAdapter
. 可能存在大量此类片段,例如 20 到 40 个。 - 每个片段都是一个列表,其中每个项目都可以包含文本或图像。
- 图像需要从网络异步上传并缓存到临时内存缓存,如果可用,还可以缓存到 SD
- 当 Fragment 离开屏幕时,应取消任何上传和当前活动(不暂停)
我的第一个实现遵循谷歌著名的图像加载器代码。我对该代码的问题是它基本上为AsyncTask
每个图像创建一个实例。在我的情况下,这会很快杀死应用程序。
由于我使用的是 v4 兼容包,我认为使用扩展的自定义加载器AsyncTaskLoader
会对我有所帮助,因为它在内部实现了一个线程池。但是令我不快的是,如果我多次执行此代码,则每次后续调用都会中断前一次。假设我的ListView#getView
方法中有这个:
此方法在循环中针对进入视图的每个列表项执行。正如我所说 - 每个后续调用都将终止前一个。或者至少这就是基于 LogCat 发生的事情
然后我想也许给每个加载器提供唯一的 id 会有所帮助,但它似乎没有任何区别。结果,我最终得到了看似随机的图像,并且该应用程序甚至从未加载我需要的 1/4。
问题
- 什么方法可以修复 Loader 做我想做的事情(有没有办法?)
- 如果不是什么是创建
AsyncTask
池的好方法,是否有可能实现它?
为了让您了解这里的代码,这是 Loader 的精简版本,其中实际的下载/保存逻辑位于单独的 ImageManager 类中。
android - AsyncTaskLoader 不运行
我想使用 Compatibility Package 在我的项目中实现 AsyncTaskLoader,所以我遵循了 Android Docs 中的 Loader 手册。
问题是 Loader 什么都不做,似乎loadInBackground()
从来没有被调用过
知道我的代码有什么问题吗?(ExpandableListFragment
扩展Fragment
,但不覆盖任何关键方法)
谢谢 :-)
/**编辑:
我意识到(晚了,我是个白痴)AsyncTaskLoader 是一个抽象类,所以我需要对它进行子类化...... m(__)m 我留下这个问题,以防有人在我身后来到这里,谁知道......
android - 对于执行的每个数据库操作的类型,活动或片段是否必须具有单独的加载器?
似乎 Google 推荐的片段或活动与 sqlite 数据库交互的方式(使用 android 支持库)是通过扩展 AsyncTaskLoader 的加载器,其工作方式类似于 CursorLoader 为 ContentProviders 所做的方式。
单个活动或片段可以以多种方式与数据库交互,更新、删除和查询一个或多个表中的数据。loadInBackground()
但是由于加载器只有一个地方来执行数据库操作(即loadInBackground()
在加载器构造函数的args
参数通过LoaderManager.initLoader()
?
非常感谢。
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 永远不会变空。我认为这可能与限制加载程序的方式有关,但我不确定。
android - 从 AsyncTaskLoader 更新进度条?
使用 AsyncTaskLoader 时,您将如何更新显示状态的进度条,因为它正在更新?通常你会等待回调在完成后移除,但是如何运行更新呢?你会让主线程(ui)在设置数据时轮询数据吗?
编辑:我说的是AsyncTaskLoader,看看加载器部分。这是类的链接:http: //developer.android.com/reference/android/content/AsyncTaskLoader.html
我想使用它,因为它是未来 :),我知道如何使用 AsyncTask 来做到这一点。
android - 使用 AsyncTaskLoader 时出错
这是我的 FragmentListArraySupport.java
这是我的装载机:
我的清单是这样的:
错误:
可能是什么错误?
这是我处理片段以及使用没有太多文档或示例的 AsyncTaskLoaders 的快速时间。我的代码所做或应该做的只是打印一个字符串列表。我可以让他们改进。
我的代码有问题吗?在哪里?
android - 用远程数据填充 ListFragment
我有一个 ListFragment,目前填充了静态数据,在编译时修复。我实际上希望从网络上截取列表的数据。
我打算使用jsoup进行检索和解析等。但是将 jsoup 链接到 ListFragment 的最佳方法是什么?
我应该使用 AsyncTaskLoader 之类的加载器吗?我不确定,因为 API 文档说加载器应该“监视数据源并在内容更改时提供新结果”,但是为我的 ListFragment 检索数据将是一次性操作:不需要来监控源。
任何建议将不胜感激。
android - 带有 AsyncTaskLoader 的 Fragment 会影响其他 Fragment 附加到 Activity
我使用 AsyncTaskLoader 从数据库查询中加载游标。我遵循了 Android 开发者示例:http: //developer.android.com/reference/android/content/AsyncTaskLoader.html
但是不知何故,在此片段(使用加载器)之后添加到页面适配器的片段没有附加到活动,并且当它尝试使用需要活动的方法(如 getString())时,会抛出异常并说这个片段没有附加到任何活动。
这是一些代码:
将片段添加到页面适配器。
/li>AsyncTaskLoader 实现:
抽象公共类 AbstractCursorLoader 扩展 AsyncTaskLoader {
/li>初始化加载器:
}
/li>
我真的不知道为什么会这样。
PS我在评论中制作代码块时遇到了一些问题,我觉得它有一个错误,很抱歉。
在此先感谢,埃拉德。
android - 应该如何在 AsyncTaskLoader 中处理 SQLiteDatabase 连接?
我想知道应该在何时何地在我的 AsyncTaskLoader 中打开/关闭我的 SQLiteDatabase 连接。我不觉得我完全理解 Loader 的生命周期,所以我担心如果我不这样做,我可能会遇到一些内存泄漏/NullPointerExceptions。我目前在加载程序的构造函数中打开了我的 SQLiteDatabase:
但是我在哪里再次关闭连接?
android - 从 AsyncTaskLoader 更新 UI
我已经将我的转换AsyncTask
为AsyncTaskLoader
(主要是为了处理配置更改)。我有一个TextView
我正在使用的进度状态,并正在使用onProgressUpdate
它AsyncTask
来更新它。它看起来没有AsyncTaskLoader
等价物,所以在loadInBackground
(在AsyncTaskLoader
)期间我正在使用这个:
我在 a 中使用它Fragment
,这就是我使用getActivity()
. 这工作得很好,除非发生配置更改,例如更改屏幕方向。我AsyncTaskLoader
一直在运行(这就是我使用 的原因AsyncTaskLoader
),但runOnUiThread
似乎被跳过了。
不知道为什么会跳过它,或者这是否是从 AsyncTaskLoader
.
更新:
我最终恢复到一个AsyncTask
,因为它似乎更适合 UI 更新。希望他们可以将与 anAsyncTask
与AsyncTaskLoader
.