gpt4 book ai didi

java - Android 处理程序未使用 HandlerThread 接收消息

转载 作者:太空狗 更新时间:2023-10-29 14:36:27 25 4
gpt4 key购买 nike

我在下面的代码中使用 HandlerThreadHandler,实际上我尝试将数据从 runnable 更新为 Handler 回调。

在每个循环中调用了 sendMessage() 函数,但我在回调中没有收到任何消息。我缺少什么?

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();
}
}
}
};
}

关于java - Android 处理程序未使用 HandlerThread 接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54530303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com