как узнать, получает ли другой процесс Windows сообщения Windows [duplicate]

Я также столкнулся с этой проблемой, когда я работал над моим проектом. Я действительно хочу, чтобы они предоставили метод end api. Во всяком случае, так я это сделал: когда вы загружаете изображение в хранилище Firebase, создайте объект и передайте этот объект в базу данных Firebase одновременно. Этот объект содержит URI загрузки изображения.

trailsRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Uri downloadUri = taskSnapshot.getDownloadUrl();
            DatabaseReference myRef = database.getReference().child("trails").child(trail.getUnique_id()).push();
            Image img = new Image(trail.getUnique_id(), downloadUri.toString());
            myRef.setValue(img);
        }
    });

Позже, когда вы хотите загружать изображения из папки, вы просто перебираете файлы под этой папкой. Эта папка имеет то же имя, что и «папка» в хранилище Firebase, но вы можете назвать их, как хотите. Я поместил их в отдельный поток.

 @Override
protected List<Image> doInBackground(Trail... params) {

    String trialId = params[0].getUnique_id();
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.child("trails").child(trialId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            images = new ArrayList<>();
            Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();
            while (iter.hasNext()) {
                Image img = iter.next().getValue(Image.class);
                images.add(img);
            }
            isFinished = true;
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Теперь у меня есть список объектов, содержащих URI для каждого изображения, я могу делать все, что я хочу с ними делать. Чтобы загрузить их в imageView, я создал другой поток.

    @Override
protected List<Bitmap> doInBackground(List<Image>... params) {

    List<Bitmap> bitmaps = new ArrayList<>();

    for (int i = 0; i < params[0].size(); i++) {
        try {
            URL url = new URL(params[0].get(i).getImgUrl());
            Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            bitmaps.add(bmp);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return bitmaps;
}

Это возвращает список Bitmap, когда он заканчивается, я просто присоединяю их к ImageView в основном действии. Ниже методы @Override, потому что у меня есть интерфейсы, созданные и прослушивающие для завершения в других потоках.

    @Override
public void processFinishForBitmap(List<Bitmap> bitmaps) {
    List<ImageView> imageViews = new ArrayList<>();
    View v;
    for (int i = 0; i < bitmaps.size(); i++) {
        v = mInflater.inflate(R.layout.gallery_item, mGallery, false);
        imageViews.add((ImageView) v.findViewById(R.id.id_index_gallery_item_image));
        imageViews.get(i).setImageBitmap(bitmaps.get(i));
        mGallery.addView(v);
    }
}

Обратите внимание, что мне нужно дождаться, когда сначала будет возвращено изображение списка, а затем вызовет поток для работы с битовой таблицей списка , В этом случае изображение содержит URI.

    @Override
public void processFinish(List<Image> results) {
    Log.e(TAG, "get back " + results.size());

    LoadImageFromUrlTask loadImageFromUrlTask =  new LoadImageFromUrlTask();
    loadImageFromUrlTask.delegate = this;
    loadImageFromUrlTask.execute(results);
}

Надеюсь, кто-то сочтет это полезным. Он также будет служить линией гильдии для меня и в будущем.

5
задан asmw 9 February 2010 в 06:03
поделиться

2 ответа

Вы посылаете ему WM_NULL с SendMessageTimeout(). Если это время после чего-то похожего на секунду или три, оно не отвечает (хотя, возможно, в конечном итоге, конечно).

10
ответ дан Jerry Coffin 5 September 2018 в 09:22
поделиться

Просто для других людей, проходящих мимо: было бы проще использовать IsHungAppWindow .

6
ответ дан user23127 5 September 2018 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: