android里service怎么会是在主线程里呢?

xiaozhubisheng 2013-08-26 08:22:50
如果是在主线程,那怎么会在后台运行?

我写了个测试
Log.e("aaaaaaa",System.currentTimeMillis()+"");
startService(intent);
Log.e("aaaaaaa",System.currentTimeMillis()+"");
输出如下:
aaaa 123344344
aaaa 123344346
service oncreate
怎么会这样?
...全文
2679 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
z1035075390 2015-12-28
  • 打赏
  • 举报
回复
结果其实就是这样的,因为你写的这三个代码都是在ui线程中执行的,startService()只不过开启了后台操作,执行完这条代码后会直接进行第三条的log日志
暴风黑雪 2013-08-30
  • 打赏
  • 举报
回复
顶起。。。。。。。
tcmakebest 2013-08-30
  • 打赏
  • 举报
回复
service 里要另外开线程执行的,而且线程里面的东西要出来的话,还要 handler, postMessage,确实麻烦的。
  • 打赏
  • 举报
回复
引用 14 楼 xiaozhubisheng 的回复:
[quote=引用 13 楼 tanwei4199 的回复:] [quote=引用 11 楼 xiaozhubisheng 的回复:] [quote=引用 10 楼 tanwei4199 的回复:] [quote=引用 8 楼 xiaozhubisheng 的回复:] [quote=引用 6 楼 tanwei4199 的回复:] 额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
那后台运行是怎么回事呢?[/quote] .....后台运行只是一种实现方式 没什么区别啊[/quote] 那后台运行时前台应该阻塞才对啊[/quote] 你不做耗时的操作就不会阻塞啊 假如你在service里做很多的计算 甚至直接访问网络 读写文件 很容易出现anr的[/quote] 比如后台听歌,如果是主线程怎么不阻塞[/quote] 没有出现阻塞的原因:是在service中又单独开启了一个子线程去做比较耗时的操作,所以不会出现ANR的现象
veardn 2013-08-28
  • 打赏
  • 举报
回复
引用 15 楼 xiaozhubisheng 的回复:
[quote=引用 12 楼 veardn 的回复:] 在主线程中启动不代表在主线程中运行 这么设计可以避免同一个service同时有多个被启动的情况
你的意思是不在主线程运行?那你先看看google的文档吧[/quote] 我的意思是可以在service里再开线程去处理,我上面已经说了onXxx方法都是在主线程里运行的
xiaozhubisheng 2013-08-28
  • 打赏
  • 举报
回复
引用 12 楼 veardn 的回复:
在主线程中启动不代表在主线程中运行 这么设计可以避免同一个service同时有多个被启动的情况
你的意思是不在主线程运行?那你先看看google的文档吧
xiaozhubisheng 2013-08-28
  • 打赏
  • 举报
回复
引用 13 楼 tanwei4199 的回复:
[quote=引用 11 楼 xiaozhubisheng 的回复:] [quote=引用 10 楼 tanwei4199 的回复:] [quote=引用 8 楼 xiaozhubisheng 的回复:] [quote=引用 6 楼 tanwei4199 的回复:] 额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
那后台运行是怎么回事呢?[/quote] .....后台运行只是一种实现方式 没什么区别啊[/quote] 那后台运行时前台应该阻塞才对啊[/quote] 你不做耗时的操作就不会阻塞啊 假如你在service里做很多的计算 甚至直接访问网络 读写文件 很容易出现anr的[/quote] 比如后台听歌,如果是主线程怎么不阻塞
xiaozhubisheng 2013-08-27
  • 打赏
  • 举报
回复
引用 10 楼 tanwei4199 的回复:
[quote=引用 8 楼 xiaozhubisheng 的回复:] [quote=引用 6 楼 tanwei4199 的回复:] 额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
那后台运行是怎么回事呢?[/quote] .....后台运行只是一种实现方式 没什么区别啊[/quote] 那后台运行时前台应该阻塞才对啊
荒颜 2013-08-27
  • 打赏
  • 举报
回复
引用 8 楼 xiaozhubisheng 的回复:
[quote=引用 6 楼 tanwei4199 的回复:] 额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
那后台运行是怎么回事呢?[/quote] .....后台运行只是一种实现方式 没什么区别啊
qinjuning 2013-08-27
  • 打赏
  • 举报
回复
启动Service后,会把消息放到主线程的消息队列中。
xiaozhubisheng 2013-08-27
  • 打赏
  • 举报
回复
引用 6 楼 tanwei4199 的回复:
额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
那后台运行是怎么回事呢?
xiaozhubisheng 2013-08-27
  • 打赏
  • 举报
回复
引用 5 楼 veardn 的回复:
service的onXxx方法都是在主线程的 startservice bindservice等都是异步的,立即返回
异步立即返回那service怎么是在主线程运行的呢?
荒颜 2013-08-27
  • 打赏
  • 举报
回复
额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
veardn 2013-08-27
  • 打赏
  • 举报
回复
service的onXxx方法都是在主线程的 startservice bindservice等都是异步的,立即返回
iltgcl 2013-08-27
  • 打赏
  • 举报
回复
你可以在service的onCreate方法中打印线程id或name来看看是不是主线程
xiaozhubisheng 2013-08-27
  • 打赏
  • 举报
回复
引用 2 楼 guoyoulei520 的回复:
startService这是异步的..
额?
凉凉二点凉 2013-08-27
  • 打赏
  • 举报
回复
startService这是异步的..
xiaozhubisheng 2013-08-27
  • 打赏
  • 举报
回复
顶起。。。。。。。
荒颜 2013-08-27
  • 打赏
  • 举报
回复
引用 11 楼 xiaozhubisheng 的回复:
[quote=引用 10 楼 tanwei4199 的回复:] [quote=引用 8 楼 xiaozhubisheng 的回复:] [quote=引用 6 楼 tanwei4199 的回复:] 额 妥妥的主线程啊 不然context引用跑到了子线程 你能控制资源的释放?
那后台运行是怎么回事呢?[/quote] .....后台运行只是一种实现方式 没什么区别啊[/quote] 那后台运行时前台应该阻塞才对啊[/quote] 你不做耗时的操作就不会阻塞啊 假如你在service里做很多的计算 甚至直接访问网络 读写文件 很容易出现anr的
veardn 2013-08-27
  • 打赏
  • 举报
回复
在主线程中启动不代表在主线程中运行 这么设计可以避免同一个service同时有多个被启动的情况

80,358

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧