1.Поставщики контента не являются потокобезопасными
По умолчанию поставщики контента не являются потокобезопасными.Если у вас есть несколько потоков, использующих контент-провайдера, вы можете увидеть множество различных исключений и другие несоответствия данных.Самый простой способ исправить это - использовать ключевое слово synchronized в каждом из открытых методов, предоставляемых поставщиком контента.
Таким образом, только один поток за раз может получить доступ к этим методам.
2.Играйте хорошо, когда делаете много записей
Мне нужно в новом приложении Serval Maps импортировать данные из двоичных файлов в базу данных, которая используется приложением внутри.Чтобы сделать это и поиграть с остальной частью приложения, лучше всего:
Создать новый поток, чтобы выполнить импорт, чтобы не повредить другие потоки, в частности поток, отвечающий за обновлениеUI;и сделать короткую паузу в конце каждого импорта, чтобы дать другим потокам, которым необходимо использовать синхронизированные методы, больше шансов.
3.Поставщики контента заставляют вас иногда думать в боковом направлении
То, как работают поставщики контента в Android, заключается в обеспечении уровня абстракции между остальной частью вашего кода и базовой базой данных.Насколько я могу судить, это главным образом связано с тем, что поставщики контента могут получать доступ к данным не из баз данных, а из других мест.
Это означает, что вы не можете выполнять необработанные SQL-запросы к базовой базе данных, и вынеобходимо указать различные компоненты запроса SQL, используя переменные, передаваемые различным методам, таким как метод запроса.Если у вас есть задача, которая не подходит для способа, которым SQL обрабатывает поставщик контента, у вас есть два варианта:
Думайте о запросе в боковом направлении, возможно, вы можете получить нужные данные с помощью альтернативных запросов.и доступ к результатам из курсора;и используйте URI для обычного доступа к данным и специальный URI, соответствующий конкретному запросу для тех задач, у которых нет альтернатив.