在主界面中启动了一个service,service需要进行一些耗时操作(如图一)。结果发现UI界面会有停顿的现象。仔细查看资料后发现,原来service和也在UI线程中,而handler和调用它的线程在同一线程中,所以service在运转时会阻塞UI线程。找到阻塞的原因就好办了。
解决方法一:将service设置成remote。设置成remote后又有产生了一个问题——该如何管理service。想要管理remote服务需要借助于AIDL(Android Interface Definition Language)。
<service android:name="com.ex.MyService" android:process=":remote"/>
解决方法二:由UI线程开启一个service,在service再启动一个线程,在线程中来处理耗时操作(如图二)。