runOnUiThread внутри представления

Я создаю пользовательский ImageView. Один из способов - загрузить изображение из URL-адреса. И я хочу получить битмап в потоке и загрузить растровое изображение в потоке пользовательского интерфейса.

Как я могу сделать runOnUIThread() для рисования растрового изображения?

Есть ли какая-то встроенная функция? Или я должен создать Handler в конструкторе и использовать его для запуска runnables в потоке пользовательского интерфейса?

Ответ 1

Загрузите изображение через AsyncTask и установите для своего представления его метод onPostExecute

ИЛИ

Из отдельного потока загрузки изображения используйте метод post для View который всегда будет запускать Runnable в UI-thread:

yourImageView.post(new Runnable() {
    @Override
    public void run() {
        // set the downloaded image here

    }
});

Ответ 2

Вы можете сделать что-то вроде этого:

 new Thread(new Runnable() {
   public void run() {
     final Bitmap bm = getBitmapFromURL(myStation.getStation().imageURL);
     ((Activity) context).runOnUiThread(new Runnable() {
       public void run() {
         icon.setImageBitmap(bm);
       }
     });
   }
 }).start();

Это будет работать вне активности, например, в ListAdapter.

Ответ 3

Создайте класс, который простирается от AsyncTask. Передайте ImageView в конструкторе. В методе doInBackground загрузите изображение. В методе postExecute установите изображение в ImageView.