gpt4 book ai didi

java - Android WifiManager 线程永远不会关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:08 25 4
gpt4 key购买 nike

执行此行后:

WifiManager man = ((WifiManager) ctx.getSystemService(Context.WIFI_SERVICE));

将显示一个标有“WifiManager”的线程。在 WifiService.java line 203 的 Java 源文件中:

 HandlerThread wifiThread = new HandlerThread("WifiService");
wifiThread.start();
mWifiHandler = new WifiHandler(wifiThread.getLooper());

问题是,每次我们的应用程序关闭并重新打开时,它都会创建一个新线程,运行它 5 次,您就有 5 个线程。不确定是否有办法阻止它?

编辑

更改为 getApplicationContext 以确保它正在访问的上下文一致并且一切正常。我仍然得到一个标记为“WifiService”的线程,但我在多次运行中只得到一个线程。

最佳答案

我相信您正在开始/停止的 (Context) Activity 中创建一个新的 WifiManager。

来自 Context.getSystemService() 的注释

Note: System services obtained via this API may be closely associated with the Context in which they are obtained from. ...

同样来自 ContextImpl.java:1478:227

@Override
public Object getSystemService(String name) {
ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);
return fetcher == null ? null : fetcher.getService(this);
}



...
service = cache.get(mContextCacheIndex);
if (service != null) {
return service;
}
...

它使用映射来缓存系统服务,所以我相信如果您使用与 Application 相同的上下文,就不会遇到这个问题。我不确定这是否是解决此问题的正确方法,但是,如果线程为您解决了一个更大的问题,那么这可能是值得的。

关于java - Android WifiManager 线程永远不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com