use*_*519 26 java multithreading android
我有一个简单的线程,如下所示:
public class AwesomeRunnable extends Thread {
Handler thisHandler = null;
Handler uihandler = null;
String update = null;
long time = 0;
public AwesomeRunnable(Handler h, long howLong) {
uihandler = h;
time = howLong;
}
public void run() {
Looper.prepare();
thisHandler = new Handler();
...
Run Code Online (Sandbox Code Playgroud)
编辑:添加的代码,启动可运行
public class StartCycle implements Runnable {
@Override
public void run() {
pomodoroLeft = numPomodoro;
while(pomodoroLeft > 0) {
pomodoroLeft--;
actualSeconds = 6 * ONE_SECOND;
runnable = new AwesomeRunnable(myHandler, actualSeconds);
runnable.start();
waitForClock();
Run Code Online (Sandbox Code Playgroud)
它是主要活动的内在阶级.这个线程,但运行不上主要的活动,但内部运行的另一个线程上的主要活动.
无论如何,这个例子与这里完全相同,但由于某种原因它给了我java.lang.RuntimeException:每个线程只能创建一个Looper.
我没有创造任何其他的掠夺者,至少在任何地方都是如此.
Aow*_*aza 81
java.lang.RuntimeException:每个线程只能创建一个Looper
抛出异常是因为您(或核心Android代码)已经调用Looper.prepare()了当前正在执行的线程.
下面检查当前线程是否已经存在Looper,如果没有,则创建一个,从而避免使用RuntimeException.
public void run()
{
if (Looper.myLooper() == null)
{
Looper.prepare();
}
thisHandler = new Handler();
....
}
Run Code Online (Sandbox Code Playgroud)
小智 5
而不是仅调用Looper.prepare();,请首先检查Looper您的Thread函数是否不存在,如果不存在,请调用该函数。像这样:
if (Looper.myLooper()==null)
Looper.prepare();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16650 次 |
| 最近记录: |