码迷,mamicode.com
首页 > 其他好文 > 详细

Service到底要不要自己调用Looper.prepare()?

时间:2014-11-11 16:02:13      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   color   ar   java   sp   strong   on   

============问题描述============


写了一个Service, 在里面启动了一个线程,于是实例化了一个Handler来处理消息。
但运行时抛出异常说不能在没有调用Looper.prepare()的线程中创建Handler。

然后我在Service的onCreate()中调用Looper.prepare(),却又被抛出异常,说一个线程中只能有一个Looper。

晕了,到底应该怎么办呢?

============解决方案1============


  主线程本身就有一个Looper  它已经调用了prepare()   你要去你自己开启的子线程调用prepare()

============解决方案2============


http://my.eoe.cn/lakeside/archive/15571.html

============解决方案3============


引用 1 楼 a425801998 的回复:
  主线程本身就有一个Looper  它已经调用了prepare()   你要去你自己开启的子线程调用prepare()

这样的话,这个thread会一直在后台运行着...   

============解决方案4============


thread 你可以不用就关掉的

============解决方案5============


创建Looper以后 loop了么?需要写Looper.loop();
一个Thread只可以set一个Looper,service默认是主线程,在Activity启动的时候已经loop起来了,所以会抛出异常。

 private static void prepare(boolean quitAllowed) {

        if (sThreadLocal.get() != null) {

            throw new RuntimeException("Only one Looper may be created per thread");

        }

        sThreadLocal.set(new Looper(quitAllowed));

    }

============解决方案6============


Service 直接在oncreate里创建handler就可以啊。谁知道你怎么写的,无码无真相。

Service到底要不要自己调用Looper.prepare()?

标签:style   http   io   color   ar   java   sp   strong   on   

原文地址:http://www.cnblogs.com/lmyangbk/p/4089368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!