gpt4 book ai didi

java - Android 中的 StrictMode 类

转载 作者:行者123 更新时间:2023-11-30 11:41:34 26 4
gpt4 key购买 nike

我正在 android 中基于网络的项目工作,因此,为了防止由于 Can't do network operation on UI Thread 而在 Android ICS 上强制关闭,我必须使用下面的代码部分或者尝试在其他线程上启动我的网络操作,但我不想更改基本代码,所以我应该在 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 中使用上述部分代码。那么,哪种解决方案更好:

  1. 使用反射在更高版本的 API 上运行这部分代码 (As oracle docs, reflective operations have slower performance than their non-reflective counterparts)
  2. 将我的 android 构建目标更改为 Android 4.1.1 (API 16) 并尝试更改 AndroidManifest.xml 上的 android:minSdkVersion

或者如果你知道更好的,请告诉我。

提前致谢:)

最佳答案

您可以使用 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) {
}
}

关于java - Android 中的 StrictMode 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com