每个线程只能创建一个Looper

时间:2015-12-14 04:22:26

标签: android looper android-looper

使用以下代码:

//==============SUBMITTING ANSWERS=======================================

function showSubmit() {
document.getElementById('submitBut').innerHTML = 
'<button onclick="submitLetters()">SUBMIT LETTERS</button>';
var arrayOfTds = document.getElementsByClassName('answerLetter');
console.log(arrayOfTds);
}

//==============CREATING GRID OF RANDOM LETTERS====================

var cols = 20; 
var rows = 10; 
var html = ""; 

for(var i = 0; i <= rows; i++) { 
html += '<tr>'; 
for(var h= 0; h <= cols; h++) { 
    var characters = 'ABCDEFGHIJKLMNOPQRSTUVXYZ'; 
    var random = parseInt(Math.random()*characters.length);
    var letter = characters.charAt(random); //returning random letter
    html += '<td onclick="showSubmit()">' + letter + '</td>'; 
} 
html += '</tr>'; 
}

document.getElementById('wsBox').innerHTML += html;

一段时间后(不是确切的情况)我有以下错误:

  

java.lang.RuntimeException:android.os.Looper.prepare每个线程只能创建一个Looper

有谁知道我哪里出错了?

2 个答案:

答案 0 :(得分:0)

我认为你应该看看这个以了解lopper:What is the purpose of Looper and how to use it?

然后,看一下:java.lang.RuntimeException: Only one Looper may be created per thread找到问题的答案。

希望有所帮助!

答案 1 :(得分:0)

请注意:每个Handler都捆绑了一个Looper,每个帖子只能创建一个Looper。因此,您可以通过Handler的构造函数创建Handler(Looper)实例。使用Handler()创建一个实例时,默认Looper来自当前Activity运行的主UI线程

对于上面的代码,您在showDialog(String message)中定义了Activity,对吧?因此,这意味着将在主UI线程上调用此方法。因此,当您在HandlerHandler()的构造函数创建showDialog(String message)实例时,主UI线程中的Looper将与默认情况下为Handler个实例。这意味着Looper.prepare();是多余的,然后删除Looper.prepare();将解决您的问题。