記一次安卓開發(fā)廣播重復(fù)注冊(cè)的解決方案

問題

需要全局接收廣播官硝,因此使用的LocalBroadcastManager

目前出現(xiàn)的問題時(shí)界面重復(fù)進(jìn)入聋亡,會(huì)導(dǎo)致廣播重復(fù)注冊(cè)與接收

出現(xiàn)原因

一般這種情況的出現(xiàn)原因廣播多次注冊(cè)或者重復(fù)注冊(cè)

解決辦法

網(wǎng)上大部分都是說出現(xiàn)原因委煤,但并沒有一個(gè)具體的解決方案

我的思路是判斷當(dāng)前廣播是否注冊(cè)康铭,保證只注冊(cè)一次,這里利用反射實(shí)現(xiàn)

判斷當(dāng)前廣播是否注冊(cè)披粟,代碼如下:

/**
 *
 * action IntentFilter中的某一個(gè)action咒锻,因?yàn)楂@取到的是IntentFilter的所有action,所以只要匹配一個(gè)就可以
 *
*/
 private boolean isRegister(LocalBroadcastManager manager,String action) {
        boolean isRegister = false;
        try {
            Field mReceiversField = manager.getClass().getDeclaredField("mReceivers");
            mReceiversField.setAccessible(true);
//            String name = mReceiversField.getName();
            HashMap<BroadcastReceiver, ArrayList<IntentFilter>> mReceivers = (HashMap<BroadcastReceiver, ArrayList<IntentFilter>>) mReceiversField.get(manager);

            for (BroadcastReceiver key : mReceivers.keySet()) {
                ArrayList<IntentFilter> intentFilters = mReceivers.get(key);
                MyLogUtil.e("Key: " + key + " Value: " + intentFilters);
                for (int i = 0; i < intentFilters.size(); i++) {
                    IntentFilter intentFilter = intentFilters.get(i);
                    Field mActionsField = intentFilter.getClass().getDeclaredField("mActions");
                    mActionsField.setAccessible(true);
                    ArrayList<String> mActions = (ArrayList<String>) mActionsField.get(intentFilter);
                    for (int j = 0; j < mActions.size(); j++) {
                        if (mActions.get(i).equals(action)) {
                            isRegister = true;
                            break;
                        }
                    }
                }
            }

        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return isRegister;
    }

使用方式:

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity());
isRegister = isRegister(manager, mActions);
if (!isRegister) {
    manager.registerReceiver(mLocalReceiver, mIntentFiiter);
}

原創(chuàng)作品守屉,允許轉(zhuǎn)載惑艇,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、作者信息和本聲明拇泛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滨巴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俺叭,更是在濱河造成了極大的恐慌恭取,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熄守,死亡現(xiàn)場(chǎng)離奇詭異蜈垮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)柠横,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門窃款,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牍氛,你說我怎么就攤上這事晨继。” “怎么了搬俊?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵紊扬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我唉擂,道長(zhǎng)餐屎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任玩祟,我火速辦了婚禮腹缩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己藏鹊,他們只是感情好润讥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盘寡,像睡著了一般楚殿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竿痰,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天脆粥,我揣著相機(jī)與錄音,去河邊找鬼影涉。 笑死变隔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的常潮。 我是一名探鬼主播弟胀,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼喊式!你這毒婦竟也來了孵户?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤岔留,失蹤者是張志新(化名)和其女友劉穎夏哭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體献联,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竖配,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了里逆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片进胯。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖原押,靈堂內(nèi)的尸體忽然破棺而出胁镐,到底是詐尸還是另有隱情,我是刑警寧澤诸衔,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布盯漂,位于F島的核電站,受9級(jí)特大地震影響笨农,放射性物質(zhì)發(fā)生泄漏就缆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一谒亦、第九天 我趴在偏房一處隱蔽的房頂上張望竭宰。 院中可真熱鬧空郊,春花似錦、人聲如沸羞延。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伴箩。三九已至,卻和暖如春鄙漏,著一層夾襖步出監(jiān)牢的瞬間嗤谚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工怔蚌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巩步,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓桦踊,卻偏偏與公主長(zhǎng)得像椅野,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子籍胯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 【Android 廣播】 BroadcastReceiver簡(jiǎn)介 BroadcastReceiver(廣播接收器)...
    Rtia閱讀 3,383評(píng)論 1 17
  • 前言 本來想寫一下廣播的竟闪,發(fā)現(xiàn)查閱后有整理的不錯(cuò)的,只好轉(zhuǎn)載圖個(gè)簡(jiǎn)便杖狼,日后好復(fù)習(xí)轉(zhuǎn)載:http://www.cnb...
    提升即效率閱讀 1,385評(píng)論 0 10
  • 諸多無奈炼蛤,最近在改一個(gè)項(xiàng)目的bug的時(shí)候,腦子老是一片空白蝶涩,可能是最近腦子不夠用理朋,總之,好多東西忘了绿聘,閱讀一些別人...
    狗子王1948閱讀 7,704評(píng)論 6 53
  • 在上崗過去的兩個(gè)月里,誰也不知道我經(jīng)歷了些什么鲜屏,而那些只能用忐忑二字形容的心路歷程或許只有幾十個(gè)夜晚披星戴月才會(huì)知...
    七月上的冥王星閱讀 388評(píng)論 0 0
  • 如果命運(yùn)是一條孤獨(dú)的河流洛史,誰會(huì)是你靈魂的擺渡人惯殊! —《擺渡人》 時(shí)間行云流水般路過高中,激起的浪...
    瀟湘云中仙閱讀 292評(píng)論 0 4