是否有可能由于某种原因,android操作系统可能会延迟或暂停我的asynctask。如果是这样,我可以做些什么来确保我的任务(例如从数据库获取数据)不会延迟或暂停。可能在UI线程上运行它,但我已经读过它并不是一个好主意,因为它可能会冻结UI并导致延迟。android可以延迟或暂停我的异步任务吗?
回答
是否有可能在Android操作系统可能会延迟或暂停我的AsyncTask出于某种原因。
它可能被另一个AsyncTask
实例阻塞。默认情况下,他们在一个单一的后台线程运行:https://developer.android.com/reference/android/os/AsyncTask.html
如果是的话我能做些什么,以确保我的任务(如读取数据库数据)不被延迟或暂停。
调查究竟导致延迟。它是doInBackground
方法中的内容还是延迟发生在后台操作之前或之后。它可以是任何东西,很难说,没有调试代码。
在UI线程上运行它可能但我已经读过它不是一个好主意,因为它可以冻结UI并导致滞后。
尽管在这种情况下AsyncTask
不是一个好的解决方案,但如果您正确实施它,它应该可以正常工作。其他要考虑的方法是Loader
s或AsyncQueryHandler
与ContentProvider
。取决于你的用例。
U不完全正确,AsyncTask使用threadPoolExecutor来运行操作,而简单的LinkedBlockingQueue来存储任务,绝对最小值为2个线程,最大为处理器数量的两倍(2 * C + 1),线程以“AsyncTask#”命名,并且在AsyncTask完成后不会终止,而是等待下一个任务。 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/AsyncTask.java#L208 – Inverce
感谢您的信息。根据你的链接,有一行:private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; 。 'AsyncTask' *可以使用threadPoolExecutor,但默认行为是串行的。 –
@Inverce'从HONEYCOMB开始,任务在单个线程上执行,以避免由于并行执行导致的常见应用程序错误。'Link [here](https://developer.android.com/reference/android/os/AsyncTask.html )。 – Enzokie
@Override protected void onPreExecute(){ holdWait = false; stop = false; }
@Override
protected Void doInBackground(Void... params) {
synchronized (this) {
while(true) {
if(Work) return null;
if(HaveWork) {
//make some
} else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
public void mynotify() {
synchronized (this) {
if(holdWait) {
notify();
holdWait = false;
}
}
}
public void setStopWork() {
synchronized (this) {
stop= false;
if(holdWait) {
notify();
holdWait = false;
}
}
}
}
我想你不明白我的问题。我没有对asynctask进行任何参考,并且再次运行它,并且开始了。当我的应用程序启动时,我只运行asyctask从数据库获取数据。 –
@DayemSiddiqui @DayemSiddiqui我已更新代码请检查 – user1782565
@DayemSiddiqui可能会帮助你 – user1782565
- 1. 延迟或短暂暂停Windows消息
- 2. 春任务异步和延迟
- 3. 异步延迟超时任务
- 4. 我可以延迟window.open()吗?
- 5. JavaFX2:我可以暂停后台任务/服务吗?
- 6. SQL Server 2008:我可以暂时暂停异步触发器的执行吗?
- 7. jQuery:暂停或延迟功能
- 8. Android中的暂停和还原异步任务
- 9. 对于任务暂停和恢复我可以使用ManualResetEventSlim吗?
- 10. Rails推迟/异步任务
- 11. 我可以同步停止服务吗?
- 12. swift中的异步延迟
- 13. 我可以延迟jQuery addClass吗?
- 14. Android异步进度对话框延迟
- 15. android异步任务
- 16. jQuery的延迟/暂停动画
- 17. 我可以暂停回调吗?
- 18. android异步任务很慢吗?
- 19. 延迟异步回调
- 20. 异步延迟加载
- 21. 的Android异步任务NetworkOnMainThreadException
- 22. 我可以根据条件暂停或恢复路线吗?
- 23. Android ScheduledThreadPoolExecutor立即执行延迟任务
- 24. freertos暂停任务
- 25. 添加延迟或暂停MySQL安全查询
- 26. 有任何方法可以在任务完成之前暂停'mousemove'事件吗?
- 27. 异步任务android onPostExecute
- 28. Android错误异步任务
- 29. .NET任务:我如何创建可以全部同步或异步执行的任务集合?
- 30. 我可以暂时暂停SharePoint Server + IIS + SQL Server吗?
它在什么情况下延迟或暂停您的任务? – Victory
我正在从数据库获取数据并填充列表视图。我使用异步任务获取数据,并在异步任务完成后将其存储在数组列表中。我在onPostExecute()函数中调用notifyDataSetChanged()以更新列表视图适配器。大多数时候列表加载正常,但有时会出现延迟(我看到空白屏幕),并在一段时间后listview被更新。 –
你怎么确定它不只是花更长的时间从数据库获取然后预期?磁盘io可能会很慢。 – Victory