如果是在主线程,那怎么会在后台运行?我写了个测试
Log.e("aaaaaaa",System.currentTimeMillis()+"");
startService(intent);
Log.e("aaaaaaa",System.currentTimeMillis()+"");
输出如下:
aaaa 123344344
aaaa 123344346
service  oncreate
怎么会这样?

解决方案 »

  1.   

    你可以在service的onCreate方法中打印线程id或name来看看是不是主线程
      

  2.   

    service的onXxx方法都是在主线程的startservice bindservice等都是异步的,立即返回
      

  3.   

    额  妥妥的主线程啊   不然context引用跑到了子线程  你能控制资源的释放?
      

  4.   

    异步立即返回那service怎么是在主线程运行的呢?
      

  5.   

    启动Service后,会把消息放到主线程的消息队列中。
      

  6.   

    在主线程中启动不代表在主线程中运行这么设计可以避免同一个service同时有多个被启动的情况
      

  7.   

    那后台运行是怎么回事呢?
    .....后台运行只是一种实现方式    没什么区别啊
    那后台运行时前台应该阻塞才对啊
    你不做耗时的操作就不会阻塞啊   假如你在service里做很多的计算 甚至直接访问网络 读写文件  很容易出现anr的
      

  8.   

    那后台运行是怎么回事呢?
    .....后台运行只是一种实现方式    没什么区别啊
    那后台运行时前台应该阻塞才对啊
    你不做耗时的操作就不会阻塞啊   假如你在service里做很多的计算 甚至直接访问网络 读写文件  很容易出现anr的
    比如后台听歌,如果是主线程怎么不阻塞
      

  9.   

    你的意思是不在主线程运行?那你先看看google的文档吧
      

  10.   

    你的意思是不在主线程运行?那你先看看google的文档吧
    我的意思是可以在service里再开线程去处理,我上面已经说了onXxx方法都是在主线程里运行的
      

  11.   

    那后台运行是怎么回事呢?
    .....后台运行只是一种实现方式    没什么区别啊
    那后台运行时前台应该阻塞才对啊
    你不做耗时的操作就不会阻塞啊   假如你在service里做很多的计算 甚至直接访问网络 读写文件  很容易出现anr的
    比如后台听歌,如果是主线程怎么不阻塞没有出现阻塞的原因:是在service中又单独开启了一个子线程去做比较耗时的操作,所以不会出现ANR的现象
      

  12.   

    service 里要另外开线程执行的,而且线程里面的东西要出来的话,还要 handler, postMessage,确实麻烦的。