原创 android 屏幕方向隨傳感器變化,並帶有切換大屏,小屏和鎖定屏幕方向

直接上完整代碼: import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Bundle

原创 TextView 富文本學習六 - 設置了ClickableSpan導致內存泄漏

** 抱歉,這裏的NoCopySpan慎用,可能有崩潰風險。 ** 1 設置ClickableSpan導致內存泄漏 spannable.setSpan(new ClickableSpan() {

原创 android Studio修改生成apk文件的名稱

app的build.gradle中添加: variant.name是buildTypes中設置的type,android.defaultConfig可以獲取versionName。 SimpleDateFormat需要引入在bui

原创 gradle中簡單配置一個項目對應不同系列設備生成部分代碼不同app文件

build.gradle中添加 ,defaultConfig 中設置 flavorDimensions “default”(解決:Error:All flavors must now belong to a named flav

原创 使用鎖實現同步簡單使用

如果想要static方法和普通的方法在同步情況下不能同時執行,單靠synchronized實現非常有難度,因爲靜態方法以class對象爲鎖,普通方法以具體的具體的對象爲鎖,java提供的另一種同步機制利用Lock接口及其實現類,比

原创 線程同步和同步原理

1 多線程問題,臨界區 單線程由於按順序繼承(即使存在編譯器優化,指令重排等優化策略也會保證程序的正確執行),多線程情況下,如果存在共享資源的情況,就會出現併發問題。 多個線程訪問或者修改共享數據,會導致數據的不一致性,進而導致出

原创 synchronized實現同步

利用synchronized關鍵字是最簡單的實現同步的方式,synchronized可以用於方法,代碼塊,synchronized可以保證在同一時刻,只有一個線程可以執行某個方法或某個代碼塊,同時synchronized可以保證一

原创 影響線程執行的函數(sleep,join,yield,priority,daemon)

1 sleep sleep使當前線程睡眠指定的毫秒數(暫停執行),但由於系統計時器和調度方法的影響,時間不是那麼精準。當線程在同步代碼中持有monitor時,sleep不會導致線程釋放已經獲取的鎖(雖然當前線程暫停了,但其他競爭

原创 如何結束線程-線程中斷

停止現成的方式 線程停止的方式: 線程執行完畢,自然會停止 異常退出 設置了標誌位,當標誌位爲false時退出 線程中斷退出 (這也是一道常見面試題) 線程函數執行完畢正常退出和發生異常被迫退出都不受我們控制,下面討論控制線程

原创 Android 中已提供的註解使用

Android定義了很多有用的註解,可供我們使用,方便編程減少潛在錯誤的發生。 1 @Override @ NonNull @Nullable Android 中最常見的就是@Override,繼承基類,重寫函數時不加@Over

原创 Android 動畫之 LayoutAnimation 動畫

1 LayoutAnimation 簡介 前面講解了LayoutTransition動畫字面翻譯是佈局的過渡也就是佈局動畫,這個類可以實現ViewGroup的佈局改變時自動執行動畫,LayoutTransition和屬性動畫一起在

原创 編譯期註解學習七-如何進行調試

1 編譯期註解調試步驟 編譯普通程序,只需要直接點擊“app”就能夠完成編譯,調試更是簡單,直接點擊debug build或者attach to process 就可以開始調試。 註解處理器Processor在編譯期執行的,此時還

原创 編譯時註解學習八 -模板文件讀取

補充一個讀取模板文件生成類的方法過程。 模板文件內容: package %package%; public class %classname% { private String name; private i

原创 編譯期註解學習五 - ElementKind,TypeKind,不同Element類型判斷

1 ElementKind 如何判斷Element的類型呢,需要用到ElementKind,ElementKind爲元素的類型,元素的類型判斷不需要用instanceof去判斷,而應該通過getKind()去判斷對應的類型 類型

原创 編譯時註解學習三之 註解處理器AbstractProcessor工具和Element屬性簡述

1 如何讀取build.gradle配置的常量 配置,讀取: @SupportedOptions({"CLASSNAME"}) @SupportedAnnotationTypes("com.ldx.annotationlib.Bi