问题标签 [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 投票
0 回答
1515 浏览

android - RejectedExecutionException 128 活动线程 AsyncTaskLoader

我已经使用 AsyncTaskLoader 搜索了 RejectedExecutionException 的解决方案,但没有一个有效。它们中的大多数用于 AsyncTask,例如https://github.com/commonsguy/cwac-task/blob/master/src/com/commonsware/cwac/task/AsyncTaskEx.java但 AsyncTaskLoader 有点不同。

我尝试的第一件事是在 onCreateLoader() 返回 CursorLoader 之前执行此操作。

真正要做的就是在 100 之后停止加载程序,这不是我想要的。我试着玩弄不同的值,但这似乎是在浪费时间,因为它没有解决问题。

然后我发现了这个:Submitting tasks to a thread-pool give RejectedExecutionException但我不确定这个答案如何解决这个问题或如何将它与 asynctaskloader 一起使用。

我还尝试创建一个 ThreadPoolExecutor 对象来更改池大小,但我不确定如何同时使用它和 asynctaskLoader。我什至不确定它是否会改变任何东西。

我也尝试过 Thread.sleep() 但这仅适用于我发现的 UI 线程,并且对我认为的后台线程没有任何作用。

我可以针对我正在执行的这种特定情况重新设计应用程序,但加载程序计数只会下降到 26 或 28。我听说某些 Android 版本的最大值为 10,所以我很担心. 希望我不必仅仅在 UI 线程中进行查询,因为我认为它们已经运行得相当快了。只是我显然不能使用 CursorLoader 执行超过 128 个查询。我该如何解决这个问题?我应该怎么办?

这是日志的 Caused by: 部分

0 投票
3 回答
877 浏览

android - 从另一个 AsyncTask 的 onPostExecute 启动的 asyncTask 在 API 10 中无法正确执行

设置:

我有一个单例应用程序类,它有一个名为fetchUpdates(). 此方法由UpdaterService(一个 IntentService)类调用。fetchUpdates()方法只需调用 DownloadDataAsyncTask,如果数据成功下载,则在调用UpdateDbAsyncTask期间调用。onPostExecute两个 AsyncTask 都驻留在应用程序类中(不确定这是否与问题相关)。

下载DataAsyncTask 类

UpdateDbAsyncTask 类

问题:

在 API 16 中一切正常,但UpdateDbAsyncTask在 API 10 中的 doInBackground 之后执行暂停。也没有调用 onCancelled(Object) 方法。

LOGCAT 输出

进一步的研究

AsyncTask的线程规则指出:

  • AsyncTask 类必须在 UI 线程上加载。这是从 JELLY_BEAN 自动完成的。
  • 任务实例必须在 UI 线程上创建。
  • 必须在 UI 线程上调用 execute(Params...)。
  • ETC...

据我了解(不多,刚开始编程),第一个UpdateDbAsyncTask完全在两个 API 中执行,因为它不违反任何线程规则。但是第二个要么违反了线程规则之一,导致它在 doInBackground 之后停止执行,要么完全超出了我的理解。

我还发现其他人也有类似的问题。后来在问题中建议

只需在我的代码中始终使用 API15+ 的 AsyncTask 类

但我也不太确定该怎么做。

任何帮助将非常感激。谢谢!

更新 1

仅当我从 Activity 调用UpdaterServiceIntentService 类(调用fetchUpdates()Application 类中的方法)时才会出现问题。我的代码MainActivity如下:

但是,当我fetchUpdates()直接使用代码调用时

从 开始MainActivity,一切都在 API 10 中完美执行。

还要注意,UpdaterService还使用一个BroadcastReceiver类调用,该类设置为使用重复警报定期调用。在这种情况下,AsyncTasks 按预期执行......非常奇怪。

更新 2

Streets Of Boston的答案似乎是正确的答案。但是,奇怪的是,以下似乎也有效:

我使用上面的代码从而不是开始IntentService,问题似乎并没有持续存在。MainActivitystartService(new Intent(this, UpdaterService.class));

0 投票
2 回答
5659 浏览

android - 使用 AsyncTaskLoader 填充 ListView

我在使用AsyncTaskLoader. 这是我第一次尝试使用加载器从SQLite数据库填充ListView 。

一切似乎都很好,当我旋转屏幕时,数据被缓存并且不再进行任何查询。但是当我按下主页按钮并再次启动我的应用程序时,数据会再次加载。

注意Usuario意味着User,所以我用用户列表填充ListView

而且我认为这个片段做得不好。我正在创建一个新的适配器而不是更新数据。

为什么adapter.notifyDataSetChanged()不工作?

所以,基本上,我的应用程序不会崩溃,但每次我重新启动应用程序时都会重新加载我的所有数据。

编辑:这是我的适配器代码:

0 投票
0 回答
73 浏览

android - 从 AsyncTaskLoader 调用方法时,方法不会被调用

事情就是这样,我有一个 AsyncTaskLoader 使用Jsoup从网页加载数据并使用ActiveAndroid将其存储在 SQLite 中。

我的所有解析和数据库方法都在一个名为 Parser 的类中,我不会费心解释原因,但是当我从 Loader 调用 Parser.getList 方法时,它不会被调用。

当我出于某种原因将方法的内容移动到加载器中的 loadInBackground 时,绝对没有任何反应。有人对此有想法吗?

0 投票
1 回答
528 浏览

android - AsynLoaderTask 和 ViewPager

我有一个带有 FragmentStatePagerAdapter 的 ViewPager。在 ViewPager 片段的 onViewCreated 方法中,我调用 LoadManager 的 initLoader 方法来启动这样的 AsyncTaskLoader

该片段当然实现了LoaderCallbacks,下面找到相关方法的实现:

我遇到的问题是,对于第一页,一切都按预期工作,但对于后续页面,我看到 onCreateLoader 调用已完成,调用了 AsyncTaskLoader 的 loadInBackground 方法,但未调用 onLoadFinished 因此现在结果交付。

我正在使用 Android 支持库。

有谁知道我做错了什么?

0 投票
5 回答
2402 浏览

android - Volley 或 ASyncTaskLoader

它们到处告诉我们应该使用 ASyncTaskLoaders,因为它们非常擅长不阻塞 UI 线程。现在有 Volley 可以使用。

我想我们不能同时使用它们,因为 Volley 自己做背景。你怎么看?哪一个更好?

0 投票
1 回答
815 浏览

android - 在片段分离时中止加载 AsyncTaskLoader

如何取消正在运行的 AsyncTaskLoader?

参考sais,应该有cancelLoadInBackground()方法可以取消正在运行的任务,但是AsyncTaskLoader中没有这个方法?!!

还有其他两种方法,cancelLoad() 和 stopLoading(),它们都不适合我。

如果有人从当前片段切换到另一个片段,我需要中止任务

0 投票
1 回答
118 浏览

asynctaskloader - 异步任务显示错误

我已经构建了一个应用程序 EverestNewsApp RSS Feed,以便在列表视图中显示当前新闻标题,运行此应用程序后出现以下错误

看到您的大力帮助和指导,我会更高兴提前谢谢您

0 投票
0 回答
662 浏览

android - AsyncTask Loader、Fragment 和返回的数据

也许我不明白 Android 中 Async Task Loader 和 Fragment 的使用。我在开发人员网站上遵循 Google 的示例(使用删除数据库),但在每种情况下,Fragment 类中的 onLoadFinished 总是返回旧数据。只有当我重新创建片段时,返回的数据才是最新的。错误在哪里?谢谢。

这里是代码。

在片段中

在 AsyncTask 加载器中

在另一个活动中

0 投票
2 回答
1319 浏览

android - 使用 Robolectric 测试 AsyncTaskLoader

有没有人有幸为 Robolectric 中的 AsyncTaskLoaders 编写单元测试?我为 AsyncTask尝试了此示例的修改版本,但它没有表现出相同的行为。特别onLoadFinished是从不调用。是否有任何可行的示例来测试使用 Robolectric 的装载机?