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