我正在尝试学习如何使用HandlerThread在后台运行程序。我有一个在fragment中的按钮,当单击时,我要从数据库中获取条目数。但实际运行时,logcat显示应用程序可能在主线程上执行了过多的工作,而我不知道自己做错了什么。
以下是我在fragment中排列代码的方式:
以下是我在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);
}
我正在遵循这篇博客文章中的示例,但我不确定我做错了什么,它仍然会在运行时阻塞UI。
handler.post(new Runnable() {
将导致您呈现的代码。请注意,发布几乎相同的答案可能会导致投票下降。 - Scratte