Android 2.3.3
Eclipse Version: 3.7.0
LogCat
LogCat 报错信息:
02-06 15:07:52.794: WARN/dalvikvm(503): threadid=18: thread exiting with uncaught exception (group=0x40015560)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): FATAL EXCEPTION: Thread-49
02-06 15:07:52.815: ERROR/AndroidRuntime(503): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at android.os.Handler.(Handler.java:121)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at android.app.Activity.(Activity.java:680)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at android.app.ListActivity.(ListActivity.java:175)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at android.preference.PreferenceActivity.(PreferenceActivity.java:76)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at com.tmall.iphone4s.manage.Preference.(Preference.java:62)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at com.tmall.iphone4s.Check.run(Check.java:297)
02-06 15:07:52.815: ERROR/AndroidRuntime(503): at java.lang.Thread.run(Thread.java:1019)
02-06 15:07:52.864: WARN/ActivityManager(61): Force finishing activity com.tmall.iphone4s/.PlayAd
发生错误原因:线程内未调用Looper.prepare(),不能创建处理器。
解决办法:在线程Check的run()中加入 Looper.prepare();
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();
setting = new Preference(context);
check();
}
分享到:
相关推荐
开一个新线程,引起的异常。1. ANR: application not responding 2.android.view.ViewRoot$...3.java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
1. 一个线程只能有一个`Looper`,且一旦创建,就不能改变。如果你试图在一个已经拥有`Looper`的线程中再次调用`prepare()`,会抛出异常。 2. 调用`Looper.loop()`之后,线程将进入消息循环,循环中的代码不会立即...
当在非UI线程(子线程)中创建`Handler`时,如果没有调用`Looper.prepare()`,程序将抛出异常:“Can't create handler inside thread that has not called Looper.prepare()”。这是因为`Handler`依赖于`Looper`来...
在创建 Handler 对象时,如果不在主线程中创建,而是在子线程中创建,会导致程序崩溃,提示的错误是 Can't create handler inside thread that has not called Looper.prepare()。这是因为子线程中没有调用 Looper....
"Can't create handler inside thread that has not called Looper.prepare()"); } mQueue = mLooper.mQueue; ... } ``` 3. **Message** Message是消息的载体,用于在Handler和Looper之间传递数据。它包含了...
当创建一个新的Handler实例时,如果在子线程中没有事先调用Looper.prepare()来初始化Looper,会抛出“Can't create handler inside thread that has not called Looper.prepare()”异常。这是因为Handler需要一个...
1. 在创建Handler时,如果当前线程没有Looper,会抛出`java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()`。这说明Handler必须在有Looper的线程中使用,例如...
在Android应用开发中,Handler、Thread和Looper是三个至关重要的组件,它们共同构成了Android线程间通信的基础架构。本文将详细解析这三个概念及其相互关系,旨在帮助开发者理解它们的工作原理和实际应用场景。 ...
本文将深入探讨Android中的三种主要线程模式:Handler、Thread以及Looper,并结合源码分析它们的工作原理。 首先,我们来理解一下Android应用的基本运行环境。Android系统默认在主线程(UI线程)中执行所有的用户...
在 run() 方法中,我们首先调用 Looper.prepare() 方法来创建 Looper 对象,然后创建一个 Handler 对象,并将其与 Looper 对象关联。最后,我们调用 Looper.loop() 方法来处理消息循环。 通过使用 Looper 对象,...
handler.sendMessage(msg); Looper.loop(); // 保持子线程的消息循环 } }).start(); // 使用AsyncTask的例子 class MyTask extends AsyncTask, Integer, String> { @Override protected String doInBackground...
在Android开发中,Handler、Looper和MessageQueue是用于实现线程间通信的关键组件,它们共同构建了一个消息处理机制。理解这三个概念以及它们之间的关系对于优化应用程序的性能和响应性至关重要。 Handler(处理器...
这些组件之间的交互过程大致如下:子线程中的Handler通过Looper.prepare()和Looper.loop()建立消息循环,然后使用Message.obtain()创建Message,设置数据和目标Handler,最后通过Handler.sendMessage()将Message放入...
nested exception is java.lang.NoClassDefFoundError" 提到了Java中处理处理器(Handler)时遇到的问题,这通常与Spring MVC或类似框架有关。在这种框架中,Handler是用于处理HTTP请求的对象,当出现上述错误时,...
在Android系统中,`Handler`、`Looper`和`MessageQueue`是三个核心组件,它们共同构成了Android消息处理机制,使得应用程序能够实现线程间的通信和异步任务处理。本资料"应用源码之HandlerLooper2.zip"显然是针对这...
在安卓开发中,`Handler`、`Looper`和`MessageQueue`是三个核心组件,它们共同构成了Android消息处理机制,用于实现线程间的通信。这个压缩包“安卓Android源码——HandlerLooper2.rar”可能包含了关于这些组件的...
`CustomThread` 类继承自 `Thread` 并重写了 `run()` 方法,在 `run()` 中调用了 `Looper.prepare()` 和 `Looper.loop()`,使线程具备了处理消息的能力。`mHandler` 是在主线程中创建的 Handler 实例,它用来发送...
3. `Message`的创建和发送:通过`Handler.sendMessage()`或`Handler.sendMessageDelayed()`发送消息,可能还有使用`Message`携带数据的示例。 4. 异步任务的实现:可能包含一个使用`Handler`、`Looper`完成异步任务...
用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列. 2、Handler: 可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会...