3
HandlerThreadを使ってバックグラウンドで動作させる方法を学びたいと思っています。私は、クリックすると、データベースからエントリの数を取得したいという断片のボタンがあります。しかし、実際に実行すると、アプリケーションがメインスレッドであまりにも多くの作業をしている可能性があり、私が間違っていたことはわかりません。HandlerThreadはバックグラウンドで実行されませんでしたか?
ここで私はフラグメントに私のコードを配置し、次をご覧ください。
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 。