在 android 中执行某些工作时,强烈建议使用 Handler,因为:
在 Android 中,只能在其原始线程(即创建视图的线程)中更新视图,否则应用程序可能会抛出异常提示
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Android 中的处理程序与创建它们的线程绑定。每个 Handler 实例都与单个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它会绑定到创建它的线程的线程/消息队列——从那时起,它会将消息和可运行对象传递到该消息队列并在它们从消息中出来时执行它们队列。所以 Handlers 在 Android 中是最安全的。
在服务期间,这是来自http://developer.android.com/reference/android/app/Service.html 的一段代码
什么是服务?
关于 Service 类的大部分困惑实际上都围绕着它不是什么:
服务不是一个单独的进程。 Service 对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它会在与其所属的应用程序相同的进程中运行。
服务不是线程。它本身并不是一种脱离主线程工作的方法(以避免应用程序无响应错误)。
因此,Service 本身实际上非常简单,提供了两个主要功能:
应用程序在后台告诉系统它想要做的事情的工具(即使用户没有直接与应用程序交互)。这对应于对 Context.startService() 的调用,它要求系统为服务安排工作,直到服务或其他人明确停止它为止。
应用程序向其他应用程序公开其某些功能的工具。这对应于对 Context.bindService() 的调用,它允许与服务建立长期连接以便与之交互。
最后是线程,
线程用于执行一些繁重的非视图功能,一些繁重的计算工作,如解析等,这样它就不会阻塞你的 UI 并安全地执行所有工作......