关于android service的个人理解

网上看到有人发帖询问有关安卓服务调用的问题,他写了一段测试代码,如下:


Log.e("aaaaaaa",System.currentTimeMillis()+"");
startService(intent);
Log.e("aaaaaaa",System.currentTimeMillis()+"");


输出结果如下:
aaaa 123344344
aaaa 123344346
service  oncreate

根据输出结果来看,如果service的oncreate()方法是在主线程中执行的,按照我们的惯性思维,同一个线程里面应该按调用的先后顺序执行

理想结果应该是这样:

aaaa 123344344

service  oncreate
aaaa 123344346

那实际输出为什么不是这样的呢?根据此帖子的跟帖和我个人的经验,我觉得之所以出现上面的结果是因为:

    虽然service的oncreate()方法是在主线程中调用的,但启动服务的startService()方法却不是在主线程中执行的,而是在子线程中将请求启动服务的意图通过安卓的消息机制放到主线程的消息队列中。这样做的好处是如果在主线程和子线程中都执行了启动服务的操作【能不能在子线程中启动服务具体没有测试过,有试过的可以跟帖分享一下经验】,那么最后的执行都要从消息队列中出栈顺序执行,避免了服务重复创建的问题。

   个人理解,欢迎拍砖。

注:分享有关安卓的消息处理机制及本地线程的两篇文章,以备之后查证。

http://blog.csdn.net/jiangwei0910410003/article/details/17021809

http://blog.csdn.net/lufeng20/article/details/24314381


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值