This is my run()
method of a worker thread which is executed using an executor:
@Override
public void run() {
Looper.prepare();
Log.i(TAG, "Starting Thread" );
final Bitmap bitmap=getBitmap(imageUrl);
handler=new Handler();
Message message;
message=Message.obtain();
message.obj=bitmap;
handler.sendMessage(message);
Log.i(TAG, "Thread Completed ");
}
This is the code of my adapter class where I am expecting to get the message:
@Override
public void onBindViewHolder(@NonNull final OwnerViewHolder ownerViewHolder, int i) {
Owner item=list.get(ownerViewHolder.getAdapterPosition());
ownerViewHolder.image.setImageResource(0);
download(item.getProfileImage());
ownerViewHolder.textView.setText(item.getDisplayName());
ownerViewHolder.textView1.setText(item.getUserType());
new Handler(Looper.getMainLooper()){
public void handleMessage(Message message){
ownerViewHolder.image.setImageBitmap((Bitmap)message.obj);
super.handleMessage(message);
}
};
}
This is the code of my ThreadPoolExecutor
:
private void download(String imageUrl){
int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors();
ThreadPoolExecutor executor = new ThreadPoolExecutor(
NUMBER_OF_CORES * 2,
NUMBER_OF_CORES * 2,
60L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>()
);
longThread=new LongThread(imageUrl);
executor.execute(longThread);
}
I don't know how to pass the bitmap from the worker thread to the main thread using handler and executor. How can I do that?