android–StrictMode磁盘读取违反空活动的setContentView

android–StrictMode磁盘读取违反空活动的setContentView,第1张

概述我最近尝试使用StrictMode但是有一个奇怪的违规,所以我尝试设置一个新的“空活动”项目(在AndroidStudio中)并添加了一个Application类,如下所示(如here中所述):publicclassTestApplicationextendsApplication{@OverridepublicvoidonCreate(){setStr

我最近尝试使用StrictMode但是有一个奇怪的违规,所以我尝试设置一个新的“空活动”项目(在@L_404_0@ Studio中)并添加了一个Application类,如下所示(如here中所述):

public class TestApplication extends Application {    @OverrIDe    public voID onCreate() {        setStrictMode();        super.onCreate();    }    private voID setStrictMode() {        if (BuildConfig.DEBUG) {            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()                    .detectAll()                    .penaltyLog()                    .build());            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()                    .detectLeakedsqlliteObjects()                    .detectLeakedClosableObjects()                    .penaltyLog()                    .penaltyDeath()                    .build());        }    }}

我在这个空项目中遇到同样的问题:
StrictMode政策违规; 〜duration = 165 ms:androID.os.StrictMode $StrictModediskReadViolation:policy = 65599 violation = 2

堆:

at androID.os.StrictMode$AndroIDBlockGuardPolicy.onReadFromdisk(StrictMode.java:1440)at java.io.UnixfileSystem.getBooleanAttributes(UnixfileSystem.java:241)at java.io.file.isDirectory(file.java:837)at dalvik.system.DexPathList$Element.toString(DexPathList.java:634)at java.lang.String.valueOf(String.java:2827)at java.util.Arrays.toString(Arrays.java:4511)at dalvik.system.DexPathList.toString(DexPathList.java:194)at java.lang.String.valueOf(String.java:2827)at java.lang.StringBuilder.append(StringBuilder.java:132)at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126)at java.lang.classLoader.loadClass(ClassLoader.java:379)at java.lang.classLoader.loadClass(ClassLoader.java:312)at androID.vIEw.LayoutInflater.createVIEw(LayoutInflater.java:606)at com.androID.internal.policy.PhoneLayoutInflater.onCreateVIEw(PhoneLayoutInflater.java:58)at androID.vIEw.LayoutInflater.onCreateVIEw(LayoutInflater.java:720)at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:788)at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:730)at androID.vIEw.LayoutInflater.rInflate(LayoutInflater.java:863)at androID.vIEw.LayoutInflater.rInflateChildren(LayoutInflater.java:824)at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:515)at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:423)at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:374)at com.androID.internal.policy.DecorVIEw.onResourcesLoaded(DecorVIEw.java:1933)at com.androID.internal.policy.PhoneWindow.generateLayout(PhoneWindow.java:2586)at com.androID.internal.policy.PhoneWindow.installDecor(PhoneWindow.java:2659)at com.androID.internal.policy.PhoneWindow.getDecorVIEw(PhoneWindow.java:2067)at androID.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:374)at androID.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323)at androID.support.v7.app.AppCompatDelegateImplV9.setContentVIEw(AppCompatDelegateImplV9.java:284)at androID.support.v7.app.AppCompatActivity.setContentVIEw(AppCompatActivity.java:139)at com.test.testapp.MainActivity.onCreate(MainActivity.java:11)at androID.app.Activity.performCreate(Activity.java:7009)at androID.app.Activity.performCreate(Activity.java:7000)at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2731)at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)at androID.app.ActivityThread.-wrap11(UnkNown Source:0)at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)at androID.os.Handler.dispatchMessage(Handler.java:106)at androID.os.Looper.loop(Looper.java:164)at androID.app.ActivityThread.main(ActivityThread.java:6494)at java.lang.reflect.Method.invoke(Native Method)at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:807)

问题:
这是配置问题吗?
如果没有,我可以让StrictMode忽略特定的方法调用(它也发生在原始项目的layoutInflater.inflate调用上)?

编辑(添加配置):
AndroID Studio版本:3.1.3
minSdkVersion 21
targetSdkVersion 27
程序兼容性-V7:27.1.1
设备:Nexus 6p

Edit2(解决方案):
我意识到CommonsWare的解决方案在下面的评论中有些隐藏,所以:instant run enabled引起了我的问题.

解决方法:

Is this a configuration problem?

可能不是,至少在配置StrictMode方面.

我尝试使用你的TestApplication类和一个新的minSdkVersion 19项目复制你的案例,我无法重现结果,在Google Pixel 2上进行测试.

可能的崩溃来源包括:

>您的设备上的AndroID版本有所不同(例如,制造商调整Pixel 2缺少的)
>关于项目中appcompat-v7版本的不同之处(我的版本为28.0.0-Alpha3)
>您的项目还有其他不同之处(崩溃感觉就像支持multIDex问题)
>更新您的开发环境有所不同 – 在这种情况下,Instant Run似乎是罪魁祸首,基于评论

can I make StrictMode ignore specific method calls

很不幸的是,不行.

总结

以上是内存溢出为你收集整理的android – StrictMode磁盘读取违反空活动的setContentView全部内容,希望文章能够帮你解决android – StrictMode磁盘读取违反空活动的setContentView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存