Android-Activity与Service之间关于进程的问题?

发布于 2017-02-11 05:59:32 字数 1050 浏览 1140 评论 2

在用Service的时候,知道Service也是在UI主线程中运行的,如果做一些耗时的事情,也会
出现阻塞主线程的问题的。
我查看了一下文档(进程与线程):
By default, all components of the same application run in the same process and most applications should not change this. However, if you find that you need to control which process a certain component belongs to, you can do so in the manifest file.
The manifest entry for each type of component element—<activity>, <service>, <receiver>, and <provider>—supports an android:process attribute that can specify a process in which that component should run.
大致意思就是,缺省情况下,如果不改变的话,所有的组件都是在一个进程中运行的。如果你想改变的话也可以改变。
假如说,我设置服务的进程和activity的不一样。是不是在Service中做一些耗时的操作,也不会影响UI主线程的阻塞情况?

PS:
这有一个以前有人问过的帖子。是关于activity与service区别的
http://www.dewen.net.cn/q/1497
不过他们是在同一个进程中的UI主线程中的(默认情况下)。
自己也试验了下,activity与service中方法的进程和线程id是一样的。

再次PS:
自己又对多个进程测试了一下。<service android:name=".controler.service.PlayerService" android:process=":remote"/>
对服务使用另一个进程,这样在服务里面进行耗时的操作。主线程还是不影响的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2017-10-22 16:28:47

你这个问题我在面试中遇到过了,就是如果你的service是在activity被你启动的,那么这个service和activity属于同一个线程中,就是在UI线程中,如果是在配置文件中配置的,则不在UI线程中,所以,你自己start的service需要在里面在new一个thread来执行耗时操作

夜无邪 2017-04-11 02:57:03

最近也在研究activity和service通信的问题,我现在只晓得,service有两种启动方式,一种是直接startservice方式启动,这样启动的service是一个单独运行的,并不会随着activity的关闭而关闭,也就是说这种方式启动的service的生命周期和activity的是没有关联的。还有一种是通过binder的方式吧,这样启动的service的生命周期和activity是相同的,也就是说当activity关闭的时候此service也停止了。还有就是activity和service的通信好像要用到aidl的方式,不过我还没弄懂.....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文