Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我在下面创建了一个非常简化的版本.严格模式通过以下策略设置: StrictMode.setThreadPolicy( StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites()

我在下面创建了一个非常简化的版本.
严格模式通过以下策略设置:

   StrictMode.setThreadPolicy(            StrictMode.ThreadPolicy.Builder()                .detectdiskReads()                .detectdiskWrites()                .detectNetwork()   // or .detectAll() for all detectable problems                .penaltyLog()                .penaltyDeath()                .build()        )

视图模型只有一个函数,该函数在调用时会使应用程序崩溃.该函数不执行任何 *** 作(其主体为空)

class Myviewmodel : viewmodel() {    fun foo() {        viewmodelScope.launch(dispatchers.IO){  }    }}

该活动在onCreate上调用viewmodel.foo(),从而使带有以下跟踪信息的应用程序崩溃.

   --------- beginning of crash2019-04-08 22:07:49.579 1471-1471/com.example.myapplication E/AndroIDRuntime: FATAL EXCEPTION: main    Process: com.example.myapplication,PID: 1471    java.lang.RuntimeException: StrictMode ThreadPolicy violation        at androID.os.StrictMode$AndroIDBlockGuardPolicy.onThreadPolicyViolation(StrictMode.java:1705)        at androID.os.StrictMode$AndroIDBlockGuardPolicy.lambda$handleViolationWithTimingAttempt   at com.example.myapplication.Myviewmodel.foo(MainActivity.kt:35)        at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:28)(StrictMode.java:1619)        at androID.os.-$$Lambda$StrictMode$AndroIDBlockGuardPolicynBulCQKaMajrWr41SB7f7YRT1I.run(UnkNown Source:6)        at androID.os.Handler.handleCallback(Handler.java:873)        at androID.os.Handler.dispatchMessage(Handler.java:99)        at androID.os.Looper.loop(Looper.java:193)        at androID.app.ActivityThread.main(ActivityThread.java:6669)        at java.lang.reflect.Method.invoke(Native Method)        at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:858)     Caused by: androID.os.strictmode.diskReadViolation        at androID.os.StrictMode$AndroIDBlockGuardPolicy.onReadFromdisk(StrictMode.java:1504)        at java.io.UnixfileSystem.getBooleanAttributes(UnixfileSystem.java:241)        at java.io.file.isDirectory(file.java:845)        at dalvik.system.DexPathList$Element.maybeInit(DexPathList.java:696)        at dalvik.system.DexPathList$Element.findResource(DexPathList.java:729)        at dalvik.system.DexPathList.findResources(DexPathList.java:526)        at dalvik.system.BaseDexClassLoader.findResources(BaseDexClassLoader.java:174)        at java.lang.classLoader.getResources(ClassLoader.java:839)        at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:349)        at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:402)        at java.util.ServiceLoader.hasNext(ServiceLoader.java:488)        at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1145)        at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1178)        at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1169)        at kotlinx.coroutines.internal.MaindispatcherLoader.loadMaindispatcher(Maindispatchers.kt:15)        at kotlinx.coroutines.internal.MaindispatcherLoader.<clinit>(Maindispatchers.kt:10)        at kotlinx.coroutines.dispatchers.getMain(dispatchers.kt:55)        at androIDx.lifecycle.viewmodelKt.getviewmodelScope(viewmodel.kt:41)        at com.example.myapplication.Myviewmodel.foo(MainActivity.kt:35)        at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:28)        at androID.app.Activity.performCreate(Activity.java:7136)        at androID.app.Activity.performCreate(Activity.java:7127)        at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)        at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2893)        at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)        at androID.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)        at androID.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)        at androID.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)        at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)        at androID.os.Handler.dispatchMessage(Handler.java:106)        at androID.os.Looper.loop(Looper.java:193)         at androID.app.ActivityThread.main(ActivityThread.java:6669)         at java.lang.reflect.Method.invoke(Native Method)         at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)         at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

根据堆栈跟踪,有磁盘读取冲突,但是该代码中的任何内容都不应访问磁盘.
感兴趣的行是:

[+++]

第35行:viewmodelScope.launch(dispatchers.IO){}

第28行:viewmodel.foo()

更进一步,如果我删除了刑罚日志(),则应用程序不会崩溃.

所以我的问题是:

如何使用上述严格模式配置防止崩溃?

协程或严格模式本身存在问题吗?

更新:
这似乎是协程的一个已知问题.仍未解决-查看对话here最佳答案解决方案是使用您自己初始化的调度程序,而不在主线程上执行I / O.

实施起来有点棘手,因为要避免由于默认情况下在Handler上启用了vsync(可能会延迟多达16ms的代码,根本不需要vsync)而导致应用程序变慢,则必须使用API​​ 28构造函数,并使用反映旧版本的AndroID.之后,您可以对Handler使用asCoroutinedispatcher()扩展函数,并使用生成的调度程序.

为了使它对我和其他人更简单,我制作了一个(小)库,该库提供了dispatchers.MainAndroID扩展,它无需任何I / O即可延迟初始化,并且可以代替dispatchers.Main使用.它还将生命周期与协同程序范围集成在一起.

在这里,您可以查看如何获取依赖关系(在jcenter上可用)以及如何实现依赖关系:https://github.com/LouisCAD/Splitties/tree/master/modules/lifecycle-coroutines 总结

以上是内存溢出为你收集整理的Android Kotlin协程在严格模式下崩溃 全部内容,希望文章能够帮你解决Android Kotlin协程在严格模式下崩溃 所遇到的程序开发问题。

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

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Android Kotlin协程在严格模式下崩溃_app_内存溢出

Android Kotlin协程在严格模式下崩溃

Android Kotlin协程在严格模式下崩溃,第1张

概述我在下面创建了一个非常简化的版本.严格模式通过以下策略设置: StrictMode.setThreadPolicy( StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites()

我在下面创建了一个非常简化的版本.
严格模式通过以下策略设置:

   StrictMode.setThreadPolicy(            StrictMode.ThreadPolicy.Builder()                .detectdiskReads()                .detectdiskWrites()                .detectNetwork()   // or .detectAll() for all detectable problems                .penaltyLog()                .penaltyDeath()                .build()        )

视图模型只有一个函数,该函数在调用时会使应用程序崩溃.该函数不执行任何 *** 作(其主体为空)

class Myviewmodel : viewmodel() {    fun foo() {        viewmodelScope.launch(dispatchers.IO){  }    }}

该活动在onCreate上调用viewmodel.foo(),从而使带有以下跟踪信息的应用程序崩溃.

   --------- beginning of crash2019-04-08 22:07:49.579 1471-1471/com.example.myapplication E/AndroIDRuntime: FATAL EXCEPTION: main    Process: com.example.myapplication,PID: 1471    java.lang.RuntimeException: StrictMode ThreadPolicy violation        at androID.os.StrictMode$AndroIDBlockGuardPolicy.onThreadPolicyViolation(StrictMode.java:1705)        at androID.os.StrictMode$AndroIDBlockGuardPolicy.lambda$handleViolationWithTimingAttempt   at com.example.myapplication.Myviewmodel.foo(MainActivity.kt:35)        at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:28)(StrictMode.java:1619)        at androID.os.-$$Lambda$StrictMode$AndroIDBlockGuardPolicynBulCQKaMajrWr41SB7f7YRT1I.run(UnkNown Source:6)        at androID.os.Handler.handleCallback(Handler.java:873)        at androID.os.Handler.dispatchMessage(Handler.java:99)        at androID.os.Looper.loop(Looper.java:193)        at androID.app.ActivityThread.main(ActivityThread.java:6669)        at java.lang.reflect.Method.invoke(Native Method)        at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:858)     Caused by: androID.os.strictmode.diskReadViolation        at androID.os.StrictMode$AndroIDBlockGuardPolicy.onReadFromdisk(StrictMode.java:1504)        at java.io.UnixfileSystem.getBooleanAttributes(UnixfileSystem.java:241)        at java.io.file.isDirectory(file.java:845)        at dalvik.system.DexPathList$Element.maybeInit(DexPathList.java:696)        at dalvik.system.DexPathList$Element.findResource(DexPathList.java:729)        at dalvik.system.DexPathList.findResources(DexPathList.java:526)        at dalvik.system.BaseDexClassLoader.findResources(BaseDexClassLoader.java:174)        at java.lang.classLoader.getResources(ClassLoader.java:839)        at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:349)        at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:402)        at java.util.ServiceLoader.hasNext(ServiceLoader.java:488)        at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1145)        at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1178)        at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1169)        at kotlinx.coroutines.internal.MaindispatcherLoader.loadMaindispatcher(Maindispatchers.kt:15)        at kotlinx.coroutines.internal.MaindispatcherLoader.<clinit>(Maindispatchers.kt:10)        at kotlinx.coroutines.dispatchers.getMain(dispatchers.kt:55)        at androIDx.lifecycle.viewmodelKt.getviewmodelScope(viewmodel.kt:41)        at com.example.myapplication.Myviewmodel.foo(MainActivity.kt:35)        at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:28)        at androID.app.Activity.performCreate(Activity.java:7136)        at androID.app.Activity.performCreate(Activity.java:7127)        at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)        at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2893)        at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)        at androID.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)        at androID.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)        at androID.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)        at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)        at androID.os.Handler.dispatchMessage(Handler.java:106)        at androID.os.Looper.loop(Looper.java:193)         at androID.app.ActivityThread.main(ActivityThread.java:6669)         at java.lang.reflect.Method.invoke(Native Method)         at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)         at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

根据堆栈跟踪,有磁盘读取冲突,但是该代码中的任何内容都不应访问磁盘.
感兴趣的行是:

第35行:viewmodelScope.launch(dispatchers.IO){}

第28行:viewmodel.foo()

更进一步,如果我删除了刑罚日志(),则应用程序不会崩溃.

所以我的问题是:

如何使用上述严格模式配置防止崩溃?

协程或严格模式本身存在问题吗?

更新:
这似乎是协程的一个已知问题.仍未解决-查看对话here最佳答案解决方案是使用您自己初始化的调度程序,而不在主线程上执行I / O.

实施起来有点棘手,因为要避免由于默认情况下在Handler上启用了vsync(可能会延迟多达16ms的代码,根本不需要vsync)而导致应用程序变慢,则必须使用API​​ 28构造函数,并使用反映旧版本的AndroID.之后,您可以对Handler使用asCoroutinedispatcher()扩展函数,并使用生成的调度程序.

为了使它对我和其他人更简单,我制作了一个(小)库,该库提供了dispatchers.MainAndroID扩展,它无需任何I / O即可延迟初始化,并且可以代替dispatchers.Main使用.它还将生命周期与协同程序范围集成在一起.

在这里,您可以查看如何获取依赖关系(在jcenter上可用)以及如何实现依赖关系:https://github.com/LouisCAD/Splitties/tree/master/modules/lifecycle-coroutines 总结

以上是内存溢出为你收集整理的Android Kotlin协程在严格模式下崩溃 全部内容,希望文章能够帮你解决Android Kotlin协程在严格模式下崩溃 所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存