【遇见Android bug】Only one Looper may be created per thread
来源:互联网 发布:同花顺软件加盟 编辑:程序博客网 时间:2024/05/17 21:45
09-02 12:11:19.700: E/AndroidRuntime(16093): Process: com.sinvideo.joyshow, PID: 16093
09-02 12:11:19.700: E/AndroidRuntime(16093): java.lang.RuntimeException: Only one Looper may be created per thread
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.os.Looper.prepare(Looper.java:77)
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.os.Looper.prepare(Looper.java:72)
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.os.HandlerThread.run(HandlerThread.java:54)
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.os.Handler.handleCallback(Handler.java:733)
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.os.Handler.dispatchMessage(Handler.java:95)
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.os.Looper.loop(Looper.java:136)
09-02 12:11:19.700: E/AndroidRuntime(16093): at android.app.ActivityThread.main(ActivityThread.java:5262)
09-02 12:11:19.700: E/AndroidRuntime(16093): at java.lang.reflect.Method.invokeNative(Native Method)
09-02 12:11:19.700: E/AndroidRuntime(16093): at java.lang.reflect.Method.invoke(Method.java:515)
09-02 12:11:19.700: E/AndroidRuntime(16093): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
09-02 12:11:19.700: E/AndroidRuntime(16093): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
09-02 12:11:19.700: E/AndroidRuntime(16093): at dalvik.system.NativeStart.main(Native Method)
遇到这个问题的情景是这样的:我创建了一个thread,同时创建了两个handler:mUIhandler和 handler ,在onResume方法中使用如下代码:
<span style="font-size:14px;">mUIHandler.postDelayed(mLivingRefreshRunnable, 30 * 1000);</span>
同时在onPause中使用如下代码:
<span style="font-size:14px;">handler.removeCallbacks(mLivingRefreshRunnable)</span>
简单来说这个问题是因为一个线程只能捆绑一个Looper,而上述代码中明显是两个handler即两个Looper对应于一个thread。
解决方式很简单,启动线程和移除线程都采用一个handler处理即可。
出现这个问题,其实是由于自己粗心所致,mUIhandler是本类创建的,而handler 是在父类中创建的;因平时常用就是handler.sendMessage(...),所以这次也顺手写成了
<span style="font-size:14px;">handler.removeCallbacks(mLivingRefreshRunnable);</span>
同时附上一篇:Android处理程序:Handler Looper Message源码研究
0 0
- 【遇见Android bug】Only one Looper may be created per thread
- Only one Looper may be created per thread
- Only one Looper may be created per thread
- java.lang.RuntimeException: Only one Looper may be created per thread
- Only one SparkContext may be running in this JVM
- QUESTION 132 Only one LONG column can be used per table
- 解决IE浏览器的only one scriptx object can be used per browser window问题
- 解决IE浏览器的only one scriptx object can be used per browser window问题
- 解决IE浏览器的only one scriptx object can be used per browser window问题
- 【BUG】Only the original thread that created a view hierarchy can touch its views
- ORA-14460: only one COMPRESS or NOCOMPRESS clause may be specified
- IMPDP ORA-14460: only one COMPRESS or NOCOMPRESS clause may be specified
- IMPDP ORA-14460: only one COMPRESS or NOCOMPRESS clause may be specified
- Spark Q&A : Only one SparkContext may be running in this JVM
- 【遇见Android bug】Android library project cannot be launched
- 多线程服务器模型-one loop per thread
- 【遇见Android bug】requestFeature() must be called before adding content
- Python SQLite3的问题sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in th
- Spring MVC 教程,快速入门,深入分析
- Java线程:并发协作-死锁
- 第185天
- Linux下的五大查询指令
- Java线程:volatile关键字
- 【遇见Android bug】Only one Looper may be created per thread
- Java线程:新特征-线程池
- 背景图片和背景色在ie8在有文本显示不出来
- Failed to send data by channels - post message failed错误解决
- 快速开发工具知多少
- Java线程:新特征-有返回值的线程
- 重载下标运算符
- 对移动互联网服务运营的思考
- linux container网络技术