Даже на более медленных устройствах вызов System.loadLibrary()
происходит очень быстро; но если ваше приложение запускается многопоточно, или если класс, который включает статический конструктор, загружается только в ответ на какое-то событие UI, то может быть состояние гонки: некоторые другие классы, которые полагаются на собственную библиотеку, будут вызывать сбои.
Нет запрета на использование статического конструктора, который вызывает System.loadLibrary()
для всех классов, имеющих собственные методы. Вы могли видеть некоторые предупреждения о загрузке загружаемой библиотеки, но это не имеет негативных последствий.
Иногда мы используем собственный Java-код для извлечения родных библиотек в каталог files, когда приложение запускается в первый раз, вместо того чтобы полагаться на системный установщик, который помещает их в каталог lib. Это должно быть сделано с особой осторожностью, и все действия (предназначенные для каламбур) должны подождать, пока не завершится извлечение libs (как правило, из папки активов APK).
Еще одним уловком может быть то, что для некоторых устройств имя вашей библиотеки может использоваться системной библиотекой. В таком случае System.loadLibrary()
загрузит библиотеку с /system/lib, а не из вашего приложения; но это вряд ли объясняет эффект задержки 3 с.
Можете ли вы опубликовать код загрузки вашей родной библиотеки? Обычно я использую для этого статическую область. – mar3kk
Библиотека загружается из файла .jar. Однако, чтобы указать на то, что библиотеки загружаются на некоторых телефонах очень хорошо и не вызывают указанной проблемы. Вот немного кода: Статический { System.loadLibrary ("libraryBeingLoaded"); } – hadez30
Вы уверены, что ваши библиотеки скомпилированы для архитектуры. Вы работаете? Что делать, если он содержит только версию ARMEABI v7, а не ARMEABI? Чем он не будет работать на архитектуре ARMEABI. – mar3kk