java 类加载器卸载_java - Android卸载类加载器导致崩溃 - 堆栈内存溢出

在开发一个Android应用并尝试实现插件功能时,遇到一个问题:当卸载加载了额外dex文件的类加载器后,应用会在几秒钟或几分钟后崩溃。异常信息显示为`AssertionError: Failed to close dex file in finalizer`,并且最终导致本机堆栈崩溃。问题可能与类加载器未正确清理或dex文件在卸载后仍被引用有关。
摘要由CSDN通过智能技术生成

我正在开发一个Android应用,并且正在尝试类似插件的功能,该功能将允许加载其他dex文件以扩展应用功能。 我已经弄清楚了如何加载扩展PathClassLoader的其他dex文件,而只需进行一些小的更改即可允许其他模块进行通信。 问题是,当dex文件首次在应用程序运行时被加载到应用程序中时,它们都能正常运行,然后,如果我决定禁用此模块,以便卸载类加载器,则该应用程序将继续正常工作几秒钟,然后它将引发异常(仍然继续正常工作),然后在几秒钟/分钟后再次出现(有时甚至需要5分钟),应用程序因本机堆栈跟踪而崩溃。 如果我决定再次加载之前禁用的模块,则只会增加崩溃的机会。

这是卸载模块类加载器几秒钟后发生的情况:

12-27 01:57:10.839 E/System: Uncaught exception thrown by finalizer

12-27 01:57:10.840 E/System: java.lang.AssertionError: Failed to close dex file in finalizer.

at dalvik.system.DexFile.finalize(DexFile.java:336)

at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:250)

at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:237)

at java.lang.Daemons$Daemon.run(Daemons.java:103)

at java.lang.Thread.run(Thread.java:764)

12-27 01:57:10.840 E/System: Uncaught exception thrown by finalizer

12-27 01:57:10.840 E/System: java.lang.AssertionError: Failed to close dex file in finalizer.

at dalvik.system.DexFile.finalize(DexFile.java:336)

at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:250)

at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:237)

at java.lang.Daemons$Daemon.run(Daemons.java:103)

at java.lang.Thread.run(Thread.java:764)

12-27 01:57:10.841 E/System: Uncaught exception thrown by finalizer

12-27 01:57:10.841 E/System: java.lang.AssertionError: Failed to close dex file in finalizer.

at dalvik.system.DexFile.finalize(DexFile.java:336)

at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:250)

at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:237)

at java.lang.Daemons$Daemon.run(Daemons.java:103)

at java.lang.Thread.run(Thread.java:764)

然后几秒钟或几分钟后,发生本机崩溃:

12-27 01:57:15.409 A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

12-27 01:57:15.409 A/DEBUG: Build fingerprint: 'Sony/G8341/G8341:8.0.0/47.1.A.8.49/3744219090:user/release-keys'

12-27 01:57:15.409 A/DEBUG: Revision: '0'

12-27 01:57:15.409 A/DEBUG: ABI: 'arm64'

12-27 01:57:15.409 A/DEBUG: pid: 17551, tid: 17697, name: Profile Saver >>> com.rowl.plugdj

12-27 01:57:15.409 A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x657a6983

12-27 01:57:15.409 A/DEBUG: x0 00000000657a6973 x1 0000007bb0739460 x2 0000007bb0600000 x3 0000000000000002

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值