1. 程式人生 > >使用EventBus的黏性事件遇到的一些問題,跟大家分享以下

使用EventBus的黏性事件遇到的一些問題,跟大家分享以下

    最近在做專案需求的時候,有一個功能是訊息箱,其中有一個是這樣的需求,大概描述如下:

    比如app接收到某三方推送後要在相應的介面上做出修改UI的動作,問題來了;這些介面有可能是當前介面或者還未啟動的介面,然後最近在看EventBus的資料,就想起使用EventBus來實現,根據如上所述,想起了使用EventBus的黏性事件來實現。來說起來咱們就幹,啪啪啪,一段邏輯寫寫寫,好了,邏輯寫完。跑起來試試看效果;

    1.在onStart()方法註冊訂閱者,onStop()方法登出訂閱者;然後收到事件修改UI;

       比如在介面A可以正常接收到事件a,發現也修改了UI,問題來了,A介面跳到B介面後,然後返回到A介面又收到事件a,不對啊我就傳送了一次,問題出現咱們就解決,然後去找傳送的地方,找到了某推送app接收類看到,自己在某三方推送的透傳和通知欄都做了接收處理。好吧這是自己做的梗,去看了下某三方推送文件,進行了對比去掉了透傳的接收,改為通知欄到達才處理。然後繼續跑起來看看,我插,居然還有問題,這是什麼梗。一切從自己身上找毛病,肯定是自己的梗。看了看發現onStart()這小可愛在開啟A時候註冊了一次,然後A介面跳到B介面後回來,他又呼叫了onStart()方法,我插你這個梗,好吧,把EventBus註冊放到oncreate()方法中去處理,對應的把登出事件放在onDestroy()。跑起來試試,發現第一次事件接收到,UI沒變化,這特麼是什麼梗,去修改UI的地方看看,我插view是null的,我幹,這麼神速我幹,簡單的說就是在接收到事件的時候,介面還沒走到view存在並可見;想想註冊放哪裡好呢?是不是應該放在view可見並非空,然後就想起來了一個類似情形,你們是否在onCreate()方法去獲取view的寬高,然後獲取到的值是0呢,是不是覺得很奇怪,好吧,這個問題也大概是這個情況;歸結起來就是說咱們在UI非空且大小固定後,才去註冊那不就好了是吧。解決方案如下:


跑起來發現問題還是沒解決,出現的現象是還是會接收到兩次事件,然後就去看下addOnGloablLayoutListener方法的原始碼,發現瞭解決辦法,最終解決辦法如下:


到此問題就解決了;

總結:使用黏性事件要是涉及到修改UI的就按如上處理下,意圖:1.註冊EventBus的時機要恰當  2.不能多次註冊。(註冊一次就會接收一次事件喲),希望能幫助到踩坑的同學。

相關推薦

使用EventBus黏性事件遇到的一些問題大家分享以下

    最近在做專案需求的時候,有一個功能是訊息箱,其中有一個是這樣的需求,大概描述如下:    比如app接收到某三方推送後要在相應的介面上做出修改UI的動作,問題來了;這些介面有可能是當前介面或者還未啟動的介面,然後最近在看EventBus的資料,就想起使用EventBu

用canvas和js畫了個鐘錶大家分享一下

<pre name="code" class="javascript">(function () { var mycanvas=document.getElementById("mycanvas"); var otex=mycanvas.getContext("

老司機總結的Jq外掛挺不錯的大家分享一下

整理一些常用的JS庫,其中大多數是jQuery相關外掛,也有Bootstrap輔助外掛及非jQuery外掛。其功能涉及:頁面佈局、圖片幻燈片播放、圖片像冊展示、功能輔助等內容。本篇只是簡單介紹外掛功能,以後使用到相關外掛時再補充介紹外掛使用方法的文章。jQuery Easi

北京賽車pk10改單是真是假?有什麽技巧規律大家分享一些穩贏內幕!!

應該 我不 沈默 想要 平臺 全部 信息 賺錢 來看 從失敗到成功,有時候僅一步之遙,有時候卻要跨過99到坎;成功需要努力,需要磨練,需要奮鬥,就算是一步之遙,一不小心也會失之千裏;我們都是股市投資的尋路者,追夢人,為成功而來,為成功而執著。讓我們同舟共濟,攜手而行,永不放

真實說說個人親身經歷北京賽車pk10真假改單大家分享一些穩贏內幕!

技術 計劃 月份 奮鬥 股市 賽車 推薦 努力 收入 從失敗到成功,有時候僅一步之遙,有時候卻要跨過99到坎;成功需要努力,需要磨練,需要奮鬥,就算是一步之遙,一不小心也會失之千裏;我們都是股市投資的尋路者,追夢人,為成功而來,為成功而執著。讓我們同舟共濟,攜手而行,永不放

我從PMP培訓歸來大家聊聊套路

行處理 會有 概念 風險管理 目前 順序 滿足 制圖 情況下 管理也是一些套路的傳承,很多人說不去學專門的管理,照樣把工作做得很好。是的,不是散打亂打就不能贏,只是會吃點虧而已。如果你有了套路在心中,那麽必定會讓自己車到山前開路,讓事情更好辦。 所以

今天遇到了一道沒有見識過的筆試題在這裡大家分享也算是自己做個記錄:

題目:如何優化for(int i=0;i<list.size();i++){...} 平時我一般就是這麼寫的,沒有想過這個問題;然後百度下發現這樣: for(int i=0,len=list.size();i<len;i++){...}就可以優化了;因為判斷條

關於Webgl實際中遇到的一些大家分享

我們在webgl的開發中,可能會遇到這樣或者那樣的問題,在這裡與大家分享。首先,我們要懂得如何找到問題。開啟Firefox火狐瀏覽器的web控制檯。這樣我們更可以知道哪一個環節出了問題,就可以對症下藥,解決問題。節省了很多時間。一、webgl與伺服器或者IIs配置資料連線的坑

2019世界頂級黑科技將在這裡大家見面

計算機讓我們從複雜的運算中得以解脫 智慧手機成為了現代人的生活中心 無人駕駛汽車解放了人們的雙手 物聯網智慧家電讓我們的生活更加便捷 … “科技改變生活” 在我們這個年代已經成為了“真理” 這所有的一切都離不開日新月異的電子消費產品 正是這些產品將各種“黑科技”帶入我們的生活 所以說,“消費

園齡10年有些新認識大家分享

從在部落格園寫第一篇部落格到現在,已經整整10年。第一篇部落格是我在大二的時候寫的,剛才翻回去看了一下,寫的是.NET中關於委託的內容,不僅文章排版稀爛,內容還慘不忍睹,仔細想了想,那篇文章好像是我在學校電信樓機房裡寫的。10年中,部落格園網站倒是經常上,但是寫部落格的頻率一般般,加上這篇一共都不到120篇,

從事多年大數據大家分享幾個學習方法

大數據 大數據學習 大數據開發 編程語言 曾從事軟件開發和培訓9年。參與多個大型項目開發,涉及c++,Java,Python,大數據,數據科學,人工智能等多個領域。熟悉多個領域中軟件開發流程及軟件架構。曾在大型IT公司任程序員,項目經理,高級講師,教學負責人。現在是一名線上培訓機構的講師,看到

發現個人工智慧寫文章的好東西大家分享

有些人都知道NLP和人工智慧,所以我不會詳細介紹。為什麼這篇文章寫得像這樣: 當我最近更新了百家號時,我升級了之前編寫的文章並重新發送。我沒想到它被髮送出去,說它是內容的重複。我無法更新文章,對我來說不是很尷尬嗎? 作為程式碼農民,如何解決這個問題?百度如何評判

大家分享一下牛人常用的資源(牛客網 )!

跟大家分享一下牛人常用的資源類,供大家參考、學習。 一、常用的資源類網站 西林街  http://www.xilinjie.com/ 胖次   http://www.panc.cc/ 愛挖盤  http://www.iwapan.com/ 呆木瓜  http://

轉載一篇關於springmvc下session的用法覺得作者寫的不錯大家分享一下

繫結模型物件中某個屬性 Spring 2.0 定義了一個 org.springframework.ui.ModelMap 類,它作為通用的模型資料承載物件,傳遞資料供檢視所用。我們可以在請求處理方法中宣告一個 ModelMap 型別的入參,Spring 會將本次請求模型物

大家推薦一個我們自己開發的任務管理系統我們自己已使用多年並且在不斷完善

管理 分享圖片 賬號 體驗 你們 軟件開發項目 取消 qq截圖 png 從2012年開始帶項目,當時就自己開發了一個非常簡單的任務管理系統(幾乎只有一個頁面),雖然非常簡單,但是比那些大名鼎鼎的項目管理系統更適合我們軟件開發的項目。 從2012年至今,我們自己開發的

今天博主大家聊一下__陣列去重__!! 【基本最全從原始到高階再到一句話!~是不是感覺很厲害哈!】

廢話不多說咱們直接看程式碼!! 博主的審美不太好 湊合看哈! <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8"> &nb

mongodb和MySql的一些等價查詢語句方便大家映照學習

文章目錄 查詢 find方法: 查詢所有的結果: 指定返回那些列(鍵): where條件: 1.簡單的等於: 2.使用and 3.使用

EventBus傳送黏性事件到接收頁面

例:                                    建立Module,關聯EventBus框架,建立第2個Activity    完成Module的佈局及控制元件的初始化    建立EventBus訊息類,設定屬性    使用EventBus的post

sqlserver知識點彙總(這段時間複習和回顧了一下sqlserver的一些知識)大家參考和學習!

use master go /*sqlserver中不區分大小寫*/ --這裡是單行註釋 /*這裡是多行註釋*/ create database test --建立資料庫 drop database test --刪除資料庫 /*以下建立資料庫的語法可以不用記,選中CREATE DATABASE,按F1就可

收集的一些eclipse快捷鍵大家參考

Ctrl + Shift + O :引入及管理imports語句 Ctrl + Shift + T : 開啟Open Type 查詢類檔案 Ctrl + Shift + F4 : 關閉所在開啟的視窗 Ctrl + O : Open declarations Ctrl + E : 開啟編輯器(切換視窗