我正在开发一个基于插件的应用程序,它有不同的插件。每个插件都是独立于其他插件的。我还使用 Google Places API 作为其中的插件。如果出现任何错误,可以选择刷新插件。但是,每当我刷新插件时,它都会重新启动并每次生成新线程。如果是基于Google Sleep API等的其他插件,则不会出现此问题。但是,每次我刷新 Places API 时,Places API 都会在内部创建新线程,并且它们不会被删除。 Android Studio Profiler 中是否有任何方法可以识别代码的哪一部分正在启动这些线程,以及是否有任何方法可以终止它们?
我已验证不存在内存泄漏,导致这些线程未被 GC 收集。
这里是带有线程的 android studio profiler 的屏幕截图:Android Studio Profiler
我得到了答案。每次重新加载插件时,Places API 使用的 PlacesClient 都会生成 10 个线程。这些是由 PlacesClient 创建的内部线程。因此,在使用 Google Places API 时,准确初始化 PlacesClient 一次至关重要。多次实例化会导致资源拥塞并创建新线程(每次初始化时几乎创建 10 个线程),如果应用程序在后台连续运行,则永远不会收集这些线程。我正在开发的应用程序使用前台服务在后台持续运行,从而防止 GC 收集 PlacesClient 生成的线程。但是,所有其他线程都已成功垃圾收集。