我了解我无法从主线程(UI 线程)访问 MySQL 数据库。所以我现在知道我可以选择这样做。我可以使用工作线程( Thread t = new Thread() )来访问 MySQL db 并获得我需要的东西,或者我可以执行 AsyncTask 来访问 MySQL db 并获得我需要的东西。
但我的问题是,什么是正确的方法或最有效的方法?当我遇到这个问题时,我真的很想了解并遵循良好的编程程序。
那么从 MySQL 数据库中检索数据:AsyncTask、工作线程还是时间、功率等没有区别?
我了解我无法从主线程(UI 线程)访问 MySQL 数据库。所以我现在知道我可以选择这样做。我可以使用工作线程( Thread t = new Thread() )来访问 MySQL db 并获得我需要的东西,或者我可以执行 AsyncTask 来访问 MySQL db 并获得我需要的东西。
但我的问题是,什么是正确的方法或最有效的方法?当我遇到这个问题时,我真的很想了解并遵循良好的编程程序。
那么从 MySQL 数据库中检索数据:AsyncTask、工作线程还是时间、功率等没有区别?
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。考虑起诉工作经理以获得可延期的工作。
实际上最好的方法是使用Loaders
. 更具体的一个CursorLoader
。与和Loaders
相比的优势在于它将与您的生命周期相关联。因此,如果您的or在您的or停止之后完成,您将不会遇到麻烦,并尝试通知不再存在的组件。AsyncTasks
Threads
Cursors
Activity
Fragment
AsyncTask
Thread
Activity
Fragment
AsyncTask 比 Thread 更好
AsyncTask 允许正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。