AsyncTask vs Worker线程,用于从MySQL DB获取信息

时间:2013-03-26 07:09:47

标签: java android multithreading android-asynctask

据我所知,我无法从主线程(UI线程)访问MySQL数据库。所以我现在知道我有这样做的选择。我可以使用工作线程(Thread t = new Thread())访问MySQL数据库并获得我需要的东西,或者我可以使用AsyncTask来访问MySQL数据库并获得我需要的东西。

但我的问题是,在这里采用这种或最有效的方法的正确方法是什么?当我遇到这个问题时,我真的很想理解并遵循良好的编程程序。

所以从MySQL数据库中检索数据:AsyncTask,一个工作线程还是没有差异时间,电源等?

3 个答案:

答案 0 :(得分:3)

实际上,最好的方法是使用Loaders。更具体的是CursorLoader。与LoadersAsyncTasks相比,Threads的优势在于Cursors将与您的ActivityFragment生命周期相关联。因此,如果您的AsyncTaskThreadActivityFragment停止后完成,并且尝试通知不再存在的组件,则不会以trobule结束。

您可以在Loaders How to Use LoadersLife Before Loaders找到一些示例。

答案 1 :(得分:2)

与Thread

相比,AsyncTask更好

AsyncTask可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。

并完成此Handler vs AsyncTask vs Thread

答案 2 :(得分:2)

AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架。 AsyncTasks理想情况下应该用于短时间操作(最多只需几秒钟。)如果您需要让线程长时间运行,则高度建议使用java.util.concurrent pacakge提供的各种API,例如 Executor,ThreadPoolExecutor和FutureTask 。 (直接来自文档)。

http://developer.android.com/reference/android/os/AsyncTask.html

长期运行操作的asynctask的替代方法是robospice。

https://github.com/octo-online/robospice