gpt4 book ai didi

android - 低平台版本的 StrictMode

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:34:40 27 4
gpt4 key购买 nike

我已经开始使用 Android StrictMode 并发现在开发过程中让它始终运行会很棒,而不仅仅是在我在 git 中创建的特殊分支上。我这样做的原因是我的应用程序要求运行 1.6 及更高版本。

我在 android 开发者博客上读到,您可以对其进行设置,以便通过反射激活它。我只是想知道这实际上是什么样子,是否有可能在这里(或其他地方)记录下来,而不是让每个想要使用它的人自己解决。

最佳答案

我已阅读 Manfred 的博文,但如果您将目标平台版本设置为低于 2.3 则它​​不起作用,因为 StrictMode.enableDefaults(); 方法不可用。

这是我的解决方案,它完全依赖于反射并且不会产生编译错误:

    try {
Class<?> strictModeClass = Class.forName("android.os.StrictMode", true, Thread.currentThread()
.getContextClassLoader());

Class<?> threadPolicyClass = Class.forName("android.os.StrictMode$ThreadPolicy", true, Thread
.currentThread().getContextClassLoader());

Class<?> threadPolicyBuilderClass = Class.forName("android.os.StrictMode$ThreadPolicy$Builder", true,
Thread.currentThread().getContextClassLoader());

Method setThreadPolicyMethod = strictModeClass.getMethod("setThreadPolicy", threadPolicyClass);

Method detectAllMethod = threadPolicyBuilderClass.getMethod("detectAll");
Method penaltyMethod = threadPolicyBuilderClass.getMethod("penaltyLog");
Method buildMethod = threadPolicyBuilderClass.getMethod("build");

Constructor<?> threadPolicyBuilderConstructor = threadPolicyBuilderClass.getConstructor();
Object threadPolicyBuilderObject = threadPolicyBuilderConstructor.newInstance();

Object obj = detectAllMethod.invoke(threadPolicyBuilderObject);

obj = penaltyMethod.invoke(obj);
Object threadPolicyObject = buildMethod.invoke(obj);
setThreadPolicyMethod.invoke(strictModeClass, threadPolicyObject);

} catch (Exception ex) {
Log.w(TAG, ex);
}

关于android - 低平台版本的 StrictMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610627/

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