Я работаю над сетевым проектом в Android, поэтому, чтобы предотвратить принудительное закрытие на Android ICS из-за Can't do network operation on UI Thread
, я должен использовать часть кода, приведенную ниже, или попытаться запустить свою сетевую операцию в другом потоке, но я не Я не хочу менять базовый код, поэтому я должен использовать приведенный ниже код в Android ICS. :
static {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
Как сделать уникальный файл apk для работы во всех версиях Android (> = 1.6)? android.os.StrictMode
доступен для более поздних версий Android, поэтому я не могу попытаться использовать указанную выше часть кода в моем Android Activity. Итак, какое решение лучше:
- Использование Reflections для запуска этой части кода в более поздних версиях API (
As oracle docs, reflective operations have slower performance than their non-reflective counterparts
) - Измените мою цель сборки Android на Android 4.1.1 (API 16) и попробуйте изменить
android:minSdkVersion
в AndroidManifest.xml
Или, если вы знаете что-нибудь получше, дайте мне знать.
Заранее спасибо :)
1 ответ
Вы можете использовать BUILD.VERSION и отражение, чтобы решить эту проблему совместимости (проверено).
if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= 9) {
try {
// StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX);
Class<?> strictModeClass = Class.forName("android.os.StrictMode", true, Thread.currentThread()
.getContextClassLoader());
Class<?> threadPolicyClass = Class.forName("android.os.StrictMode$ThreadPolicy", true, Thread.currentThread()
.getContextClassLoader());
Field laxField = threadPolicyClass.getField("LAX");
Method setThreadPolicyMethod = strictModeClass.getMethod("setThreadPolicy", threadPolicyClass);
setThreadPolicyMethod.invoke(strictModeClass, laxField.get(null));
} catch (Exception e) {
}
}
Call requires API level 9 (current min is 6): android.os.StrictMode#setThreadPolicy
, а намек на eclipse использует @SuppressLint("NewApi")
или @TargetApi(9)
. что я должен делать ?
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.