原创 Android事件分發機制之Activity(一)

Android事件分發機制的原理簡單講就是從用戶點擊屏幕開始,從屏幕上移動,最後擡起的過程,主要包括:按下(down)、移動(move)、擡起(up),將這些操作觸發的事件交給具體的View處理的過程。 事件分發包含的主要方法有: 1、d

原创 Android事件分發之View(三)

當事件由ViewGroup傳遞到View時,第一個調用的是View的dispatchTouchEvent方法,然後再進行分發,下面來看下源碼: public boolean dispatchTouchEvent(Moti

原创 Java多線程生產者和消費者實現

一、概述 首先,我們需要明白生產者和消費者模型是爲了解決多線程之間通信而產生的。其次,需要了解實現線程間通信用到了哪些知識點。先來看一張生產者和消費者模型圖: 這裏有四個對象,一個是生產者,一個是消費者,一個是容器,最後還有一個是需要生

原创 Java同步之synchronized正確使用

一、概述 講到synchronized大家都知道這是爲了解決多線程對同一個資源競爭導致問題而出現的,synchronized的使用分爲同步方法和同步塊,那麼對於多線程的同步問題我們只需要在方法上或方法裏面的代碼塊加入synchronize

原创 Java線程狀態以及如何創建和停止線程

一、概述 對於多線程的定義,以及爲何要使用多線程我想大家都很熟悉,這篇文章主要想梳理一下多線程的一些基礎知識,以便我們能熟練掌握。 二、線程的狀態 線程的狀態主要有5種,它們分別是:創建狀態、就緒狀態、運行狀態、阻塞狀態和死亡狀態。我們可

原创 Android用戶協議與隱私政策實現

一、概述 根據法規,現在上架的應用都要在App啓動的時候彈出用戶協議和隱私政策相關的內容,以便告知用戶在使用App過程中的一些注意事項之類的東西,如果App沒有添加這個功能,則不允許上架。   二、實現 final Pr

原创 Java字符編碼

一、概述 首先要明白什麼是字符編碼這個問題,字符編碼就是將我們人能認識的字符,比如:"a","b",“中”,“國”等變成計算機可以認識的字符,叫做字符編碼。但是現在又有一個問題,我們依據什麼轉換規則,將人認識的字符編碼成計算機認識的字符呢

原创 Android消息機制分析

一、概述 Android的消息機制主要指Handler的運行機制,Handler的運行需要底層的MessageQueue和Looper的支撐。那麼這三者之間是什麼關係,如何運行的呢?想知道這些我們先來看下主線程是如何更新UI的。 二、主線

原创 Android如何定位混淆後代碼錯誤行數

一、背景 現在大多數app打包時都會做代碼混淆,這樣能增加代碼的安全性,防止別人反編譯。但同時也帶來一個問題,如果代碼報錯了,我們無法準確的定位到哪個類多少行報的錯誤,下面介紹一下如何解決這個問題的方法。 二、需要用到的工具 1、SDK提

原创 解決Android Studio無法升級和更新SDK問題

最近用的Android Studio版本爲3.0,想升級到最新的3.2.1,於是進行如下操作: 上面截圖是升級後的,請忽略版本號爲3.2.1,升級前爲3.0。當時點擊Check Now無任何反應,點擊左邊Updates下面的Androi

原创 Android屬性動畫

在Android 3.0之前,系統提供的動畫有幀動畫和補間動畫,幀動畫的原理就是將一些圖片連續的播放出來,補間動畫是對View進行操作包括AlphaAnimation、RotateAnimation、TranslateAnimation、

原创 Android座標系統

一、Android座標系統 1、Android系統中有兩種座標系統,一種是Android座標系,另一種是View座標系。 二、Android座標系 1、是指以手機屏幕左上角爲原點,從左到右爲X軸的正方向,從上到下爲Y軸的正方向。 三、Vi

原创 簡單工廠模式

一、概念 簡單工廠模式屬於創建型模式,又叫做靜態方法模式,簡單工廠模式是由一個工廠對象決定創建哪一種產品類的實例。   二、用途 如何去實例化一個合適的對象。   三、核心 有一個專門的類來負責創建實例的過程。   四、原理 1、抽象產品

原创 Dialog彈出後顯示遮罩效果

在很多APP中經常見到打開一個彈框後整個屏幕的背景顏色變深了,那麼這種效果怎麼實現呢?/** * 設置背景透明度 * * @param bgAlpha */ private void bac

原创 Java for循環例子

一、打印直角三角形 public static void rightTriangle() { // 控制行數 for (int i = 1; i <= 5; i++) { // 控制每行顯示的個數 for (int j =