我知道我不能从主线程(UI线程)访问MySQL DB。因此,我现在知道我有这样做的选择。我可以使用工作线程( thread t= new Thread() )来访问MySQL db并获取我需要的内容,或者我也可以使用AsyncTask来访问MySQL db并获取所需的内容。
但我的问题是,什么是正确的方法,或者说是最有效的方法?当我遇到这个问题时,我真的很想理解并遵循好的编程过程。
那么从一个MySQL db: AsyncTask,一个工作线程中检索数据,或者会不会有时间,电力等方面的差异?
发布于 2013-03-26 15:19:47
AsyncTask被设计为围绕线程和处理程序的帮助器类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于较短的操作(最多几秒钟)。如果您需要让线程长时间运行,强烈建议您使用 java.util.concurrent提供的各种API,如Executor、ThreadPoolExecutor和FutureTask。(直接来自文档)。
http://developer.android.com/reference/android/os/AsyncTask.html。
对于长时间运行的操作,异步任务的另一种选择是robospice。
https://github.com/octo-online/robospice
更新:
使用协程或任何其他线程机制来弃用Asynctask。考虑为可推迟的工作而起诉工作经理。
发布于 2013-03-26 15:17:59
实际上,最好的方法是使用Loaders。更具体的CursorLoader。与AsyncTasks和Threads相比,Loaders的优势在于Cursors将绑定到您的Activity或Fragment生命周期。因此,如果您的AsyncTask或Thread在您的Activity或Fragment停止后结束,并尝试通知一个不再存在的组件,您将不会陷入麻烦。
你可以在How to Use Loaders和Life Before Loaders这里找到一些Loaders的例子。
发布于 2013-03-26 15:14:36
与线程相比,AsyncTask更好
AsyncTask支持正确且轻松地使用UI线程。此类允许在UI线程上执行后台操作和发布结果,而不必操作线程和/或处理程序。
然后通过这个
https://stackoverflow.com/questions/15631304
复制相似问题