据我所知,我无法从主线程(UI线程)访问MySQL数据库。所以我现在知道我有这样做的选择。我可以使用工作线程(Thread t = new Thread())访问MySQL数据库并获得我需要的东西,或者我可以使用AsyncTask来访问MySQL数据库并获得我需要的东西。
但我的问题是,在这里采用这种或最有效的方法的正确方法是什么?当我遇到这个问题时,我真的很想理解并遵循良好的编程程序。
所以从MySQL数据库中检索数据:AsyncTask,一个工作线程还是没有差异时间,电源等?
答案 0 :(得分:3)
实际上,最好的方法是使用Loaders
。更具体的是CursorLoader
。与Loaders
和AsyncTasks
相比,Threads
的优势在于Cursors
将与您的Activity
或Fragment
生命周期相关联。因此,如果您的AsyncTask
或Thread
在Activity
或Fragment
停止后完成,并且尝试通知不再存在的组件,则不会以trobule结束。
您可以在Loaders
How to Use Loaders和Life Before Loaders找到一些示例。
答案 1 :(得分:2)
与Thread
相比,AsyncTask更好AsyncTask可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
答案 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。