解決 MulticastLock 耗電問(wèn)題

起因

google 發(fā)了封郵件,ES 一直持有 Multicast Locks 導(dǎo)致耗電量增加。

解決方案

1.Utils 增加 getWifiManage 方法,防止內(nèi)存泄露,加上Nullable注解。

On versions prior to Android N (24), initializing the WifiManager via Context#getSystemService can cause a memory leak if the context is not the application context.

@Nullable
public static WifiManager getWifiManage() {
    return (WifiManager) MainApplication.getInstance().getApplicationContext()
                             .getSystemService(Context.WIFI_SERVICE);
}

2.增加鎖屏銷毀組播,亮屏啟動(dòng)組播。釋放監(jiān)聽(tīng)的端口


IntentFilter filter=new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
MainApplication.getInstance().registerReceiver(mBroadcastReceiver, filter);


case Intent.ACTION_SCREEN_OFF:
    destoryZeroconf(); // 執(zhí)行 MulticastSocket 的 close 方法關(guān)閉組播
    break;
case Intent.ACTION_SCREEN_ON:
    if (NetworkUtils.isWifiAvailable()) {
        initZeroconf(); // 重啟組播
    }
    break;

3.去掉 MulticastLock 鎖

不再需要 MulticastLock 鎖,同時(shí)方便通過(guò)代碼靜態(tài)檢查。

總結(jié)

經(jīng)過(guò)上面的操作,在屏幕打開(kāi)的時(shí)候才監(jiān)聽(tīng)組播。屏幕關(guān)閉的時(shí)候就不消耗電量去監(jiān)聽(tīng)。

同時(shí) ES 有另外的 UDP 端口以及緩存方案去接收局域網(wǎng)的掃描請(qǐng)求,關(guān)閉組播不會(huì)導(dǎo)致功能的失效。

參考

原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,008評(píng)論 25 709
  • 四海八荒,神跡罕現(xiàn), 花神芊凌,初降人間, 險(xiǎn)象環(huán)生,偶遇凡人, 名曰玉生,孑然一身, 兩情相悅,修房筑瓦, 一晃...
    獅子王他爹閱讀 316評(píng)論 0 0
  • 昨天晚上8點(diǎn),我做了自己在千聊上的第一次分享,主題是《DISC高效閱讀:如何做到一年讀書(shū)200本》,這也是我在除了...
    小說(shuō)家郭大俠閱讀 497評(píng)論 2 2

友情鏈接更多精彩內(nèi)容