Nano Hash - криптовалюты, майнинг, программирование

Создание основных объектов Volley

Что я немного не уверен в Volley, так это объекты RequestQueue, ImageLoader и реализации ImageLoader.ImageCache.

В примерах, с которыми я сталкивался, они создаются в onCreate(), но не имеет смысла создавать новую очередь запросов для каждого действия. У меня также есть множество мероприятий и сервисов, и я буду использовать их везде. Если мне действительно нужно создавать их экземпляры в каждой услуге или действии, насколько они дороги?

Какие передовые практики используются в производственных приложениях для создания экземпляров этих объектов и доступа к ним?

27.06.2013


Ответы:


1

Мой опыт работы с Volley заключается в том, что я инициировал RequestQueue внутри класса Application, передавая ему глобальный контекст в приложение. Я не вижу недостатка в этом, просто создайте статическую ссылку на RequestQueue как таковую:

public class MyApplication extends Application
{
    private static RequestQueue mRequestQueue;

    @Override
    public void onCreate() {
        super.onCreate();
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    // Getter for RequestQueue or just make it public
}

В документации, как вы можете для класса Application, он цитирует:

Вызывается при запуске приложения до того, как будут созданы какие-либо действия, службы или объекты получателя (за исключением поставщиков контента). Реализации должны быть максимально быстрыми (например, с использованием ленивой инициализации состояния), поскольку время, затраченное на эту функцию, напрямую влияет на производительность запуска первой активности, службы или получателя в процессе. Если вы переопределяете этот метод, обязательно вызовите super.onCreate().

Поэтому можно с уверенностью предположить, что наша RequestQueue будет доступна для отправки запросов в службу, активность, загрузчик и т. д.

Теперь, что касается ImageLoader, я бы сделал одноэлементный класс, обертывающий некоторые функции, чтобы у вас был только один экземпляр ImageCache и один ImageLoader, Ex.

public class ImageLoaderHelper
{
    private static ImageLoaderHelper mInstance = null;

    private final ImageLoader mImageLoader;
    private final ImageCache mImageCache;

    public static ImageLoaderHelper getInstance() {
        if(mInstance == null)
            mInstance = new ImageLoaderHelper();
        return mInstance;
    }

    private ImageLoaderHelper() {
        mImageCache = new MyCustomImageCache();
        mImageLoader = new ImageLoader(MyApplication.getVolleyQueue(),mImageCache);
    }

    // Now you can do what ever you want with your ImageCache and ImageLoader
}

Если вам нужен действительно хороший пример загрузки изображений с помощью volley, посмотрите этот образец проекта, он действительно полезен.

Надеюсь это поможет.

27.06.2013
  • Отлично, это то, что мне было нужно. И когда вы говорите о документации, где вы ее нашли? Кроме того, помимо RequestQueue, я также использую реализацию ImageLoader и ImageLoader.ImageCache. Считаете ли вы, что их также безопасно использовать на уровне приложений? 27.06.2013
  • К сожалению, по Volley не так много документации, это один из недостатков. Документацию по классу Application можно найти здесь: developer.android.com/reference /android/app/Application.html Я отредактирую, что вам следует делать с ImageLoader. 27.06.2013
  • Я согласен, что синглтон - это путь. Однако текущая реализация не позволяет легко отменять запросы изображений, т.е. нет возможности пометить эти запросы. В настоящее время я изменяю класс NetworkImageView, чтобы передать имя действия в качестве тега, чтобы упростить отмену изображений при переходе на новое действие. 09.07.2013
  • Просто заметка. Конструктор должен быть закрытым. В противном случае, хорошая работа. 01.11.2013
  • почему мы должны это делать в случае загрузки изображения private static ImageLoaderHelper mInstance = null; 24.03.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..