IA M在我下面的代码使用HandlerThread和处理程序,其实我尝试从可运行到处理程序回调更新数据。
在每一个循环中的sendMessage()函数调用,但我没有收到回调nothhing。我很想念?
public class MainActivity extends AppCompatActivity {
private TextView result;
HandlerThread handlerThread = new HandlerThread("bThread");
Callback callBack = new Callback(){
@Override
public boolean handleMessage(Message message) {
Bundle bundle = message.getData();
String val = bundle.getString("output");
result.setText(val);
return false;
}
};
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
result = findViewById(R.id.result);
handlerThread.start();
handler = new Handler(handlerThread.getLooper(),callBack);
handler.post(runnable);
}
Runnable runnable= new Runnable() {
@Override
public void run() {
for (int i = 0; i <200 ; i++) {
try {
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("output",i+"");
message.setData(bundle);
handler.sendMessage(message);
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
}
我的事情你的代码工作
问题是在低于线
Thread.sleep(3000);
注释此行并运行代码是工作或者增加一些更短的时间之如下面的代码。
package com.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class HandleActivity extends Activity implements View.OnClickListener {
private TextView tvMessage;
private Button btSendMesaage;
private HandlerThread handlerThread = new HandlerThread("hthread");
private Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
Bundle bundle = msg.getData();
String messsage = bundle.getString("output");
tvMessage.setText(messsage);
private Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
Bundle bundle = msg.getData();
String messsage = bundle.getString("output");
tvMessage.setText(messsage);
try{
Thread.sleep(3000);}catch (Exception e){}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.handler_activity);
initLayout();
handlerThread.start();
}
private void initLayout() {
tvMessage = (TextView) findViewById(R.id.textview);
btSendMesaage = (Button) findViewById(R.id.button);
btSendMesaage.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
sendMessage();
break;
default:
break;
}
}
private Handler handler;
private void sendMessage() {
handler = new Handler(handlerThread.getLooper(), callback);
handler.post(runnable);
}
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
try {
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("output", i + "");
message.setData(bundle);
handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
}