我确实有一个拒绝在Android 4.1设备上运行的旧应用。这是在这里跳过的NetworkOnMainThreadException。
所以我尝试通过以下步骤允许此操作 - 但这些都不起作用。我用4.1模拟器测试了它。真正需要解决这个错误 - 应用程序重写是没有选择的。目前,我从我的应用中排除了4.1设备。
班级档案......
public class StrictModeWrapper {
static {
try {
Class.forName("android.os.StrictMode");
} catch (Exception exception) {
throw new RuntimeException(exception);
}
}
public static void checkAvailable() {
}
@SuppressLint("NewApi")
public static void setThreadPolicy() {
StrictMode.ThreadPolicy strictModeThreadPolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(strictModeThreadPolicy);
}
}
...在扩展的Application类中调用:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
try {
StrictModeWrapper.checkAvailable();
StrictModeWrapper.setThreadPolicy();
} catch (Throwable throwable) {
}
}
}
扩展的Application类在Manifest中注册并正常工作。
答案 0 :(得分:2)
自api 11以来StrictMode
似乎没有任何变化。它必须是您使用的其他一些Android类的更改,这会导致违反StrictMode政策。
Android文档本身说
“但不要觉得有必要修复StrictMode找到的所有内容。”
但是,因为它是NetworkOnMainThreadException
你必须彻底检查。查看应用中的所有网络通信,并确保它们不会阻止您的主线程。
并确保在发布版本中删除/禁用StrictMode
代码,因为它只是用于识别意外错误的开发人员工具。
你的应用程序崩溃是因为:
StrictMode
之后重置的onCreate
类发生了变化。我有两个问题:
答案 1 :(得分:2)
StrictMode在Android版本> = 16上的行为与先前版本不同。文档建议在扩展的Application,Activity等的onCreate()中发出StrictMode调用。扩展应用程序中至少onCreate()现在工作不同,并且证明文档错误(截至今天)。
这是StrictMode文档,它描述了如何将StrictMode调用添加到扩展应用程序(例如,今天的错误):
以下是描述问题的Google代码问题,并提供了解决方法: