android開發(fā)中相見恨晚的冷知識【簡單說】

不知不覺我已有一個月沒有更新了唱遭。

群里有朋友說:“雞排,你變了〕适唬現(xiàn)在天天傳播雞湯拷泽。技術文章也不寫了⌒湔埃”


抱歉抱歉司致,最近工作上確實太忙了。是時候上盤新菜了聋迎。請各位大佬們品嘗品嘗脂矫。


本篇都講些什么?

  • 如何排除第三方傳遞依賴導致的aar沖突
  • 如何保持依賴最新的aar
  • fragment里getActivity()空指針
  • 代碼new 出來的VIew沒有ID
  • 不傳遞的方式巧取context
  • 不使用handle回到主線程(即UI線程)
  • 防止VIew上信息被其他軟件截屏或系統(tǒng)截圖泄漏信息
  • 專制接二手渣渣項目快速看方法調用棧順序

如何排除第三方傳遞依賴導致的aar沖突

開發(fā)過程中經常出現(xiàn)你需要依賴第三方的某個庫,比如下面的代碼所示:

dependencies {
          compile 'com.github.BolexLiu:PressScanCode:v1.0.0'
}

PressScanCode是一個長按掃描屏幕上的二維碼工具庫,他底層的二維碼識別使用了zxing庫砌庄。我們假設作者開發(fā)時使用了老版本zxing 1.0.1的版本羹唠。而我們集成進來以后卻發(fā)現(xiàn)本身項目里也依賴Zxing 但是我們的版本是3.3.0的。由于包管理具有傳遞性娄昆。這時就會起沖突佩微。gradle無法自己處理你到底是該依賴哪個。下面是處理辦法萌焰。

//查看依賴 app是項目模塊名稱
/gradlew :app:dependencies --configuration compile    
dependencies {
    compile('com.github.BolexLiu:PressScanCode:v1.0.0'', {
       exclude group: 'com.google.zxing' //排除依賴
    })
  compile 'com.google.zxing:core:3.3.0'
}

這樣做的意思排除PressScanCode原有的依賴哺眯。而選擇依賴我們自己設定的3.3.0的zxing庫。


如何保持依賴最新的aar

這個相當容易扒俯,代碼如下奶卓。你只需要將appcompat-v7:25.1.1這個版本好替換成“+”號即可每次都依賴最新的版本一疯。

dependencies {
  // compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.android.support:+'
}


fragment里getActivity()空指針

重寫fragment然后在onAttach方法存下一個Activity引用。在其他地方需用用到context或者Activity的時候使用該引用夺姑。而不使用getActivity()墩邀。可以規(guī)避這個問題盏浙。但請留意強引用可能會導致內存泄漏的問題眉睹。

protected Activity mActivity;
@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.mActivity = activity;
}


代碼new 出來的VIew沒有ID

通常我們的VIew是通過布局文件依照@+id的方式在R文件中生成對映的一個Int值。這是用于運行時保證資源唯一性废膘。但有一種情況竹海,我們需要動態(tài)的在代碼中new出一個VIew來。如果一個VIew還好丐黄。多個view的時斋配,沒有id會導致你不方便持有一個引用。那么可以 View的generateViewId() 方法來生成 id灌闺,讓系統(tǒng)來保證唯一艰争。而不是用隨機數(shù)產生或者手寫一個具體的值。注:API17++


不傳遞的方式巧取context

context是我們經常用到的一個對象菩鲜,這里我們不深入的講解context园细,它的本質只是android組件的一個抽象接口,封裝了一些統(tǒng)一的標準方法接校。有興趣可以自己去查資料或翻閱源碼猛频。下面這張圖已經說明了。

下面提供一種思路通過VIew直接獲取context的api蛛勉。特別是適配器中鹿寻。別再傳遞這個對象了。注:從View上拿到的一定是Activity對象诽凌,但是如果你通過Service中或者Application中獲取的Context是不能用做操作View的毡熏。本質區(qū)別就是抽象方法和對象是無法保證你要操作的具體對象是你要的對象(這句話沒讀懂的多讀幾遍,慢點讀侣诵。說到底它就是依賴倒置原則問題)

View.getContext()  //任何被創(chuàng)建的VIEW都持有了context對象

不使用handle回到主線程(即UI線程)

通常我們使用Activity.runOnUiThread在子線程完成邏輯后更新UI痢法。否則系統(tǒng)不會同意你在子線程中更新UI的。還有一種場景可以用下面的api

View.post(new Runnable() ) //同樣可以切回UI線程執(zhí)行杜顺。

當然現(xiàn)在Rxjava和EventBus可以完美的解決此類問題财搁。我更推薦Rxjava。


防止VIew上信息被其他軟件截屏或系統(tǒng)截圖泄漏信息

在某些特殊的場景下躬络,你的app可能和用戶隱私有關系尖奔。如果需求需要禁止截圖行為和覆蓋你當前的Acitivity行為,可以使用 如下API。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE)

專制接二手渣渣項目快速看方法調用棧順序

我們可能因為跳槽提茁,或者其他原因接觸到了一個陌生的項目淹禾。可能它就是那種神才能看懂的代碼茴扁。有沒有辦法看某個方法到底是誰發(fā)起調用铃岔。都經過了什么過程呢?方法還是有的丹弱。如圖: one>tow>printStack德撬。我們需要找出printStack的調用順序铲咨。

//在最后你想看的方法中加入以下代碼躲胳,就可以神奇的在日志中打印出來方法調用順序
   RuntimeException here = new RuntimeException("bolex");
        here.fillInStackTrace();
        Log.w("myTag", "Called: " + this, here);


嗯。今天就到這里爸纤勒,不是不是坯苹,是吧(? ̄?? ̄??)?。


如何下次找到我?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末摇天,一起剝皮案震驚了整個濱河市粹湃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泉坐,老刑警劉巖为鳄,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腕让,居然都是意外死亡孤钦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門纯丸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏形,“玉大人,你說我怎么就攤上這事觉鼻】∨ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵坠陈,是天一觀的道長萨惑。 經常有香客問我,道長仇矾,這世上最難降的妖魔是什么庸蔼? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮若未,結果婚禮上朱嘴,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好萍嬉,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布乌昔。 她就那樣靜靜地躺著,像睡著了一般壤追。 火紅的嫁衣襯著肌膚如雪磕道。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天行冰,我揣著相機與錄音溺蕉,去河邊找鬼。 笑死悼做,一個胖子當著我的面吹牛疯特,可吹牛的內容都是我干的。 我是一名探鬼主播肛走,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼漓雅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朽色?” 一聲冷哼從身側響起邻吞,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葫男,沒想到半個月后抱冷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡梢褐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年旺遮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片利职。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡趣效,死狀恐怖,靈堂內的尸體忽然破棺而出猪贪,到底是詐尸還是另有隱情跷敬,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布热押,位于F島的核電站西傀,受9級特大地震影響,放射性物質發(fā)生泄漏桶癣。R本人自食惡果不足惜拥褂,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牙寞。 院中可真熱鬧饺鹃,春花似錦莫秆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茄螃,卻和暖如春缝驳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归苍。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工用狱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拼弃。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓夏伊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肴敛。 傳聞我的和親對象是個殘疾皇子署海,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,074評論 25 707
  • Android Studio JNI流程首先在java代碼聲明本地方法 用到native關鍵字 本地方法不用去實現(xiàn)...
    MigrationUK閱讀 11,858評論 7 123
  • 導讀:Android面試中高頻率出現(xiàn)的題都在這了镀梭。試題大部分從互聯(lián)網收集,博主下了一番功夫進行梳理總結踱启,難免有不足...
    Maat紅飛閱讀 55,719評論 61 844
  • 夢到達的地方报账,終歸醒來! 先畫線稿埠偿,掃描透罢,再用ps上色,步驟簡單冠蒋,但過程煎熬羽圃。幸好堅持了下來。 這也是自己想創(chuàng)作的...
    阿鹽大帝閱讀 420評論 2 5
  • 小小人兒 咿咿呀呀學說話兒 親人有話兒對她講 側耳聆聽好認真 如是講她不好呀 瞬間眼淚汪汪噠 竟如斷線的豆子啊 滴答答
    曉xiaoxiao閱讀 198評論 0 3