我正在开发一个通过 wifi 连接从外部设备收集数据的应用程序。我使用线程来完成这项工作,并将数据存储到数据库中。
将线程放在自定义应用程序类(作为单例管理)中是个好主意吗?或者如果我把它放在前台服务中会更好吗?
我正在开发一个通过 wifi 连接从外部设备收集数据的应用程序。我使用线程来完成这项工作,并将数据存储到数据库中。
将线程放在自定义应用程序类(作为单例管理)中是个好主意吗?或者如果我把它放在前台服务中会更好吗?
使用 IntentService。IntentService 使用单独的后台线程,因此不会阻塞 UI 线程。即使您的所有活动都在后台,它仍然存在。AsyncTask 的问题在于,如果 Activity 终止,它就会终止。使用 IntentService,您的下载将愉快地运行,直到完成。
如果您确实了解Android 线程并且您感觉很舒服,那么您可以创建自己的线程。不过,我观察到使用 IntentService 要容易得多。唯一的缺点是 IntentService 线程不能被中断,但我怀疑大多数开发人员是否需要该功能。
要从 IntentService 与应用中的其他组件进行通信,请使用 LocalBroadcastReceiver。要与 UI“交流”,请使用通知。
您可以使用为此类内容构建的AsyncTask 。它不会阻塞您的 UI 线程,并且会在后台完成您的网络和存储。
如果您需要,这里有一个教程:
https://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/