如何解决如何在Android Studio中重新启动线程?
我在这里遇到麻烦,我不知道是否有人可以点亮我一点。
我有一个方法,该方法在onPostExecute回调上的AsyncTask类上调用:
@Override
protected void onPostExecute(Void result)
super.onPostExecute(result);
if (!ConnectSuccess)
{
msg("Connection Failed. Is it a SPP Bluetooth? Try again.");
finish();
}
else
{
msg("Connected.");
isBtConnected = true;
beginListenForData();
}
progress.dismiss();
}
它启动一个线程(在这种情况下,是从我的arduino提供了一些信息):
private void beginListenForData()
{
Log.i("[BLUETOOTH]","Creating handler");
mHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
//super.handleMessage(msg);
if(msg.what == ConnectedThread.RESPONSE_MESSAGE){
String txt = (String)msg.obj;
if(myLabel.getText().toString().length() >= 30){
myLabel.setText("");
myLabel.append(txt);
}else{
myLabel.append("\n" + txt);
}
}
}
};
Log.i("[BLUETOOTH]","Creating and running Thread");
btt = new ConnectedThread(btSocket,mHandler);
btt.start();
}
这是我来自run方法的代码:
public void run(){
byte[] buffer = new byte[1024];
int bytes;
write("PIN".toString().getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(mmInStream));
Log.i("[THREAD-CT]","Starting thread");
while(true){
try{
bytes = mmInStream.read(buffer);
String resp = new String(buffer,bytes);
//String resp = br.readLine();
//Transfer these data to the UI thread
Message msg = new Message();
msg.what = RESPONSE_MESSAGE;
msg.obj = resp;
uih.sendMessage(msg);
}catch(IOException e){
break;
}
}
Log.i("[THREAD-CT]","While loop ended");
}
问题是当我向arduino发送信息时(按一个按钮)。这是我的写代码:
public void write(byte[] bytes){
try{
Log.i("[THREAD-CT]","Writting bytes");
mmOutStream.write(bytes);
}catch(IOException e){}
}
它不再听我一开始的内容。它没有再次进入运行方法。我已阅读this的答案,但我不太确定如何在此处实现异步任务。
解决方法
使用一个异步任务,该任务的onPostExecute()可以运行OnUiThread()。这将使它继续监听。在此处查看此类异步任务的示例代码:
private class TheTask extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
return null;
}
protected void onPostExecute(String result) {
runOnUiThread(new Runnable() {
public void run() {
}
});
}
}
,
好吧,问题似乎不在我的android代码中,而在我的arduino代码中。似乎在我发送信息之后,我的arduino也停止发送了。我已经解决了这个问题,并且可以解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。