原创 記使用騰訊TIM開發聊天通訊遇到的問題及解決方案

目錄 一、V1和V2在ITIMMessage上接口不同,V1支持多個Elem,V2不支持,對應的解決方案,使用java反射 二、向Message塞入多個Elem時,語音Elem順序會發生變化 三、IM在app存活時,切出去修改權限後,返回

原创 ThreadLocal的源碼解析

涉及到類:Thread、ThreadLocal、ThreadLocalMap(ThreadLocal的內部類) 含義:這些變量與普通變量不同,每個訪問一個線程(通過其get或set方法)的線程都有其自己的,獨立初始化的變量副本。 Thre

原创 android的JNI開發、CMake使用、javah命令、靜態註冊

一、Android Studio中下載必要的插件 這要先安裝圖中箭頭所指的兩個插件: 標號爲2的是用於將C編譯成so包的工具CMake 標號爲1的是用於在調試app時,可以調試C代碼的工具插件 二、在gradle中配置CMake環境 在

原创 略解:AOP 切面編程 —— 動態代理

一、首先要講動態代理,先要從代理模式講起 // 定義公共接口 public interface IShop { public void buy(); } public class MyBuy implements IShop

原创 EventBus 3.0 略解

記錄的EventBus架構中用到的技巧 大體的架構——事件總線和觀察者模式,BusEvent中所有事件發放和訂閱都是在一個單例中去實現的,最基礎的代碼結構如下,EventBus在這個基礎上去優化的 public class EventC

原创 使用PhishTank api檢測釣魚網站,提示You must supply a URL to use this function

解決方法: http://checkurl.phishtank.com/checkurl/  將http換成https即可,就這樣簡單,就這樣坑 PhishTank官方文檔地址 https://www.phishtank.com/inde

原创 設計模式——STATE(狀態模式)

這是屬於設計模式中的對象行爲模式之一 在TCPConnection中維護着一個TCPState,在不同狀態下,維護着一個不同的TCPState,例如:stablished狀態下,維護着對應TCPstablished,實現該狀態下對應的O

原创 android的JNI開發、C調用java的函數方法、AllocObject和NewObject的區別、使用javap獲得方法簽名

目錄 以下總結了Android開發中C語言調用java方法的幾種情況: 1、非靜態native方法調用所在對象中的方法 2、C語言調用java有基礎類型返回值的情況 3、C語言調用java有類對象返回值的情況 4、非靜態native方法調

原创 java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ......

這個錯誤出現在bindService後,從回調獲得對應服務的Ibinder對象,然後強轉成我們自己實現的Binder對象時,出現的類型錯誤。而且這個錯誤出現的前提是,我是在一個新的進程啓動一個Service <service andr

原创 faceBook、mopub、谷歌的廣告創收文檔收集

faceBook 文檔鏈接 mopub 文檔鏈接 谷歌 文檔鏈接   注意: 1、測試谷歌效果,在文檔提供廣告id中以供測試(以上三款廣告創收,後臺統計廣告點擊數據是通過廣告id收集,故接入無需像國內第三方sdk接入一樣需要認包名、key

原创 Git · 三 git的衝突合併、git stash指令使用方式和髒工作樹的管理

  當我們使用git pull指令從遠程服務器拉取最新版本的代碼時,常常很容易和本地的版本的代碼出現衝突,例如出現這樣的提示: 這種情況是出現在你修改了本地代碼,修改的代碼和遠程分支的代碼出現衝突且修改的代碼沒有commit到本地分支時

原创 Git · 二 git的工作樹、版本庫以及分支管理和git status -s、git checkout、git branch等相關指令的使用

先理解Git的空間概念(這引用了Runoob.com 的一張圖)   工作區:指的是文件夾中所有非隱藏的文件 版本庫:其實應該叫分支branch比較好理解(後面會仔細解釋) index(版本庫的暫存區):這個也是git指令中 --cac

原创 Git · 一 gitconfig的初始化配置、ssh祕鑰的生成、ssh-agent代理和與Github的接軌

一、Git的配置 ——  .gitconfig     一般下載安裝Git之後的第一個步驟就使用以下命令配置Git當前的使用者名字和郵箱 $ git config --global --add “uers.name” user $ gi

原创 併發 · 五 —— 使用wait()、notify()、notityAll()實現線程之間的協作

    當涉及一種場景,線程A需要等待線程B完成工作後再開始工作,這時就需要使用到Object基類中的wait()、notify()和notifyAll()來實現,先上例子 public class text { volatile

原创 Rxjava的泄露解決方案——rxlifecycle的使用和原理分析

    最近在公司沒有開發任務,就完整過了一下ReactiveX的rxjava,在考慮使用場景時,就考慮到異步操作可能會造成泄露問題,所以網上搜索就發現relifecycle這個輔助庫。下面就記錄一下它的使用和實現原理 需要在build.