根据我的知识,在应用程序启动时的Android中,Os为应用程序分配新进程,应用程序将在该进程的UIThread(mainthead)中运行。 所以在Activity类下定义的操作将在UiThread上运行(如果我们不为任何操作创建单独的类)。如果我们执行长时间运行的过程,我们将在Service类下执行该任务(服务正在运行,甚至应用程序将终止)..所以服务在UiThread上运行或单独的Thead?如果它在UiThread下运行那么为什么它不会影响到Ui OR如果它在单独的Thread下运行那么为什么我们要为长时间运行的操作创建另一个单独的线程呢?
答案 0 :(得分:1)
服务在UI线程上运行。此外,它还可以与UI进行交互。 这是一篇很好的首发文章。 http://developer.android.com/guide/components/services.html
答案 1 :(得分:1)
在Android启动应用程序时,Os会为应用程序分配新进程
正确。
应用程序将在该进程的UIThread(mainthead)中运行
不正确的。 “app”不会在任何线程上运行。在线程上调用Java对象的方法。
所以在Activity类下定义的操作将在UiThread上运行
不正确的。 Java类不能在任何线程上运行。在线程上调用Java对象的方法。因此,将在线程上调用活动的方法。其中一些方法将在Android应用程序进程的主应用程序线程(a.k.a.,UI线程)上调用。
那么服务是在UiThread上运行还是分开Thead?
两者都不同,或两者兼而有之,取决于您想要如何看待它。同样,Java类不能在任何线程上运行。在线程上调用Java对象的方法。在主应用程序线程上调用服务的生命周期方法(例如,onCreate()
,onStartCommand()
,onDestroy()
)。在后台线程上调用onHandleIntent()
的{{1}}。
如果它在UiThread下运行那么为什么它对Ui没有影响
任何时候花在主应用程序线程上的代码中都会冻结UI。无论代码是活动方法,服务方法还是其他方法,都无关紧要。
如果它在单独的Thread下运行那么为什么我们要为长时间运行的操作创建另一个单独的线程?
避免占用主应用程序线程,从而冻结UI。