gpt4 book ai didi

java - HandlerThread 没有在后台运行?

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:02 26 4
gpt4 key购买 nike

我正在尝试学习如何使用 HandlerThread 在后台运行。我在 fragment 中有一个按钮,单击该按钮后,我想从数据库中获取条目数。但是当我实际运行它时,logcat 说应用程序可能在主线程上做了太多工作,我不知道我做错了什么。

这是我在 fragment 中安排代码的方式:

private Handler handler=new Handler();
private MyWorkerThread myWorkerThread;

private Runnable myRunnable=new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
List<Item> list=db.getAllItems();
Log.d(TAG,"Size: "+list.size());
}
});
}
};

private class MyWorkerThread extends HandlerThread{
private Handler myHandler;

private MyWorkerThread(String name) {
super(name);
}

private void postTask(Runnable task){
myHandler.post(task);
}

private void setMyHandler(){
myHandler=new Handler(getLooper());
}
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

myWorkerThread=new MyWorkerThread("myWorkerThread");
myWorkerThread.start();
myWorkerThread.setMyHandler();
}

@OnClick(R.id.btn)
void getCount(){
myWorkerThread.postTask(myRunnable);
}

我正在按照 this blog post 中的示例进行操作,但我不确定自己做错了什么,它在运行时仍然会阻塞 UI。

最佳答案

从您的 Runnable 中删除它:

handler.post(new Runnable() {

您正在发布您的 Runnable,它反过来只是将 Runnable 发布回主线程。所以您的主线程仍在执行所有工作。

关于java - HandlerThread 没有在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40184820/

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