原创 Android之static靜態變量生命週期

原文鏈接:http://www.cnblogs.com/Joanna-Yan/ 靜態變量引用與內存回收、內存泄露這些問題有關,有必要加深研究和理解。   一、靜態變量在類被加載的時候分配內存。

原创 Java之transient關鍵字

在LinkedHashMap 類中,看到有個關鍵字transient,它是什麼意思呢?   下面援引百度百科解釋: Java的serialization提供了一種持久化對象實例的機制。當持久化對象時,可能有一個特殊的對象數據成員,我們不

原创 Android之音頻開發基礎

相信不少人在音頻採集處理的時候,會遇到這樣的設置界面,那採樣率、比特率、通道這樣的術語,代表的是什麼意思呢? 圖1   1、基本常識 頻率的單位是HZ,中文爲赫茲,是電,磁,聲波和機械振動每秒的週期次數(週期/秒)。 人類的耳朵能聽到的

原创 Android之Parcel和Parcelable

相對於Parcel,我們更常接觸到Parcelable,兩個單詞很相像,它們有什麼區別嗎? 相同點:兩個都是專門爲 Android 設計的系統類。 Parcel 是一個實體類,用於進程間通訊,傳遞數據。 Parcelable 是一個接口,

原创 Android之多線程安全AtomicBoolean類詳解

在多線程併發請求中,我們假設有這樣的一些情景: if(a){      xxxxx;          a = false;      yyyyy; } 這裏存在線程安全的問題:多個線程可能都讀到a的值進入了代碼塊,然後都去修改了a的值;

原创 Android之裝飾者模式

在查看ContextWrapper源碼時,發現以下用法: 這種寫法叫裝飾者模式,相比於單純的實現接口,它具備更大的靈活性。 // 抽象類接口,規範餅的屬性 public interface ICake { public Strin

原创 Java之equals和hashcode方法

還記得最初學習java時,老師動不動就眉飛色舞的向我們講解如何重寫equals、hashCode方法,可自己真的一臉懵逼: Object源碼分別有 equals() 和 hashcode()方法,爲什麼還需要重寫? 在繼續之前,有人會問:

原创 Android之跨進程通訊Binder介紹

Binder是Android中的一種跨進程通信方式 從Android Framework 角度來說Binder是ServiceManager連接各種Manager(ActivityManager、WindowManager等等)和相應Ma

原创 Android之解決RxJava內存泄漏:RxLifecycle詳解及原理分析

前言 隨着RxJava及RxAndroid的逐漸推廣,使用者越來越多,但是有一個問題,RxJava的使用不當極有可能會導致內存泄漏。 比如,使用RxJava發佈一個訂閱後,當Activity被finish,此時訂閱邏輯還未完成,如果沒有

原创 Android官方架構組件ViewModel+LiveData+DataBinding架構屬於自己的MVVM

Demo運行效果 獲取Bing每日一圖並顯示 項目結構 實現過程 1. 添加Glide、Retrofit、RxJava的依賴 implementation 'com.squareup.retrofit2:retrofit:2.4.0'

原创 Android Studio之maven Central 和 JCenter

Android studio 是從哪裏得到庫的? Android Studio是從build.gradle裏面定義的Maven 倉庫服務器上下載library的。Apache Maven是Apache開發的一個工具,提供了用於貢獻libr

原创 RESTful API 最佳實踐

RESTful 是目前最流行的 API 設計規範,用於 Web 數據接口的設計。 它的大原則容易把握,但是細節不容易做對。本文總結 RESTful 的設計細節,介紹如何設計出易於理解和使用的 API。   一、URL 設計 1.1 動詞

原创 APP之防重放攻擊

HTTPS數據加密是否可以防止重放攻擊? 否,加密可以有效防止明文數據被監聽,但是卻防止不了重放攻擊。 防重放機制 我們在設計接口的時候,最怕一個接口被用戶截取用於重放攻擊。重放攻擊是什麼呢?就是把你的請求原封不動地再發送一次,兩次...

原创 Android之LRU算法

LRU算法簡介 LRU 全稱是 least recently used,意爲“最近最少使用”,說白了就是一種淘汰算法,當有新的元素插入進來的時候,我們的使用空間又有限的時候,就需要淘汰舊的元素,這時候就會選擇淘汰最近最少使用的元素。  

原创 Java之繼承一個泛型類

泛型繼承的原則 繼承泛型類時,必須對父類中的類型參數進行初始化。   步驟: 1、定義一個泛型類Parent<T>,   注意:定義:泛型T,使用:實際類型 2、子類繼承調用。Son類定義時有兩種方式初始化父類型的類型參數: 法1:用子類