gpt4 book ai didi

java - 为什么 handleMessage 在 ui 线程中运行而我使用后台线程循环器创建处理程序?

转载 作者:行者123 更新时间:2023-11-29 02:20:05 27 4
gpt4 key购买 nike

为什么 handleMessage 在我使用后台线程循环器创建处理程序时在 ui 线程中运行?此循环程序不属于 ui 线程,但 alertdialog 显示正确且没有崩溃,但应给出错误。

如果问题不清楚,请原谅,因为我不太懂英语

public class ToastService extends Service {

private HandlerThread thread;
private Looper looper;
ServiceHandler handler;
public static int num=0;
int idd=0;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
Log.i("say","created");
thread=new HandlerThread("mhm", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
looper=thread.getLooper();
handler=new ServiceHandler(looper);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {




int messageIntent=0;
if (intent!=null){
messageIntent=intent.getIntExtra("myMessage",0);
Log.i("sayonStartCommand",messageIntent+"");
}

Toast.makeText(this, "ook", Toast.LENGTH_SHORT).show();
Message message=new Message();
idd=messageIntent;
message.what=0;
message.arg1=startId;

Bundle bundle=new Bundle();
bundle.putInt("say",messageIntent);
message.setData(bundle);

handler.sendMessage(message);
return START_STICKY;
}

@Override
public void onDestroy() {
Log.i("say","finish xxxxxxxxxxxxxxxxxx");
super.onDestroy();
}

private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
new AlertDialog.Builder(MainActivity.mcontext)
.setTitle("ok")
.setMessage("message").show();
int i=msg.getData().getInt("say");
Log.i("say",i+"");
if (idd==3){
stopSelf(msg.arg1);
}
}
}
}

最佳答案

looper=thread.getLooper(); 这个循环器仍然在主线程上运行。因此,使用该循环程序创建的 Handler 也在主线程中处理消息。

如果你想创建一个在后台线程中处理消息的Handler

 class LooperThread extends Thread {
public Handler mHandler;

public void run() {
Looper.prepare();

mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};

Looper.loop();
}
}

关于java - 为什么 handleMessage 在 ui 线程中运行而我使用后台线程循环器创建处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56816510/

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