1

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

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

那么从 MySQL 数据库中检索数据:AsyncTask、工作线程还是时间、功率等没有区别?

4

3 回答 3

4

AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用线程框架。AsyncTasks 最好用于短时间的操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如执行器、线程池执行器和 FutureTask。(直接来自文档)。

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

用于长时间运行操作的 asynctask 的替代方法是 robospice。

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

更新:

不推荐使用协程或任何其他线程机制的 Asynctask。考虑起诉工作经理以获得可延期的工作。

于 2013-03-26T07:19:47.457 回答
4

实际上最好的方法是使用Loaders. 更具体的一个CursorLoader。与和Loaders相比的优势在于它将与您的生命周期相关联。因此,如果您的or在您的or停止之后完成,您将不会遇到麻烦,并尝试通知不再存在的组件。AsyncTasksThreadsCursorsActivityFragmentAsyncTaskThreadActivityFragment

您可以在Loaders此处找到如何使用装载机在装载机之前的生活的一些示例。

于 2013-03-26T07:17:59.070 回答
2

AsyncTask 比 Thread 更好

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

并通过这个Handler vs AsyncTask vs Thread

于 2013-03-26T07:14:35.650 回答