原创 自定義Adapter中實現startActivityForResult的分析

最近幾天在做文件上傳的時候,想在自定義Adapter中啓動activity時也返回Intent數據,於是想到了用startActivityForResult,可是用mContext怎麼也調不出這個方法,只能調用startActiv

原创 Android DiskLruCache完全解析,硬盤緩存的最佳方案

概述 記得在很早之前,我有寫過一篇文章Android高效加載大圖、多圖解決方案,有效避免程序OOM,這篇文章是翻譯自Android Doc的,其中防止多圖OOM的核心解決思路就是使用LruCache技術。但LruCache只是管理

原创 Java內存管理分析

Java的內存管理就是對象的分配和釋放問題。在 Java 中,程序員需要通過關鍵字 new 爲每個對象申請內存空間 (基本類型除外),所有的對象都在堆 (Heap)中分配空間。另外,對象的釋放是由 GC 決定和執行的。在 Java

原创 如何在Android中避免創建不必要的對象

在編程開發中,內存的佔用是我們經常要面對的現實,通常的內存調優的方向就是儘量減少內存的佔用。這其中避免創建不必要的對象是一項重要的方面。 Android設備不像PC那樣有着足夠大的內存,而且單個App佔用的內存實際上是比較小的。所

原创 深入剖析 Android中的 ArrayMap

數據集合在任何一門編程語言中都是很重要的一部分,在 Android 開發中,我們會實用到ArrayList, LinkedList, HashMap等。其中HashMap是用來處理鍵值對需求的常用集合。 而Android中引入了一

原创 Android面試之 Java篇

面向對象 Java面向對象的三個特徵與含義 繼承:繼承是從已有類得到繼承信息創建新類的過程。提供繼承信息的類被稱爲父類(超類、基類);得到繼承信息的類被稱爲子類(派生類)。繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝

原创 Android多線程斷點續傳下載

原理 其實斷點續傳的原理很簡單,從字面上理解,所謂斷點續傳就是從停止的地方重新下載。 斷點:線程停止的位置。 續傳:從停止的位置重新下載。 用代碼解析就是: 斷點 : 當前線程已經下載完成的數據長度。 續傳 : 向服務器

原创 Android高效加載大圖、多圖解決方案,有效避免程序OOM

高效加載大圖片 我們在編寫Android程序的時候經常要用到許多圖片,不同圖片總是會有不同的形狀、不同的大小,但在大多數情況下,這些圖片都會大於我們程序所需要的大小。比如說系統圖片庫裏展示的圖片大都是用手機攝像頭拍出來的,這些圖片

原创 觸摸事件與手勢監聽--Android GestureDetector詳解

目錄 事件監聽的方法 GestureDetector類 GestureDetector使用方法 GesturetDetector.OnGestureListener 接口 GesttureDetector.OnDoubleTap

原创 ArrayList、Vector以及LinkList的區別

ArrayList:底層數據結構是數組結構,你就可以把它看成是一個可變大小的且只能裝對象的數組。因爲數組有索引(角標)所以ArrayList的查詢速度快,而添加刪除元素速度稍慢。因爲,你每刪除或者添加一個元素,你都要移動所添加或刪

原创 Android中Handler引起的內存泄露

在Android常用編程中,Handler在進行異步操作並處理返回結果時經常被使用。通常我們的代碼會這樣實現。 public class SampleActivity extends Activity { private f

原创 HashMap實現原理分析

1. HashMap的數據結構 數據結構中有數組和鏈表來實現對數據的存儲,但這兩者基本上是兩個極端。 數組 數組存儲區間是連續的,佔用內存嚴重,故空間複雜的很大。但數組的二分查找時間複雜度小,爲O(1);數組的特點是:尋址容易

原创 Java中HashMap,LinkedHashMap,TreeMap的區別

Java爲數據結構中的映射定義了一個接口java.util.Map;它有四個實現類,分別是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用於存儲健值對,根據鍵得到值,因此不允許鍵重複

原创 Android7.0之後 FileProvider配置報錯android.content.pm.ProviderInfo.loadXmlMetaData問題

Android7.0之後 FileProvider配置報錯android.content.pm.ProviderInfo.loadXmlMetaData問題 工程結構裏依賴了一個moudle,因此項目裏除了app主模塊,還有一個l

原创 Handler.postDelayed(new Runnable)是否運行在主線程

知識點 postDelayed(new Runnable())是否運行在主線程中? 答案 是的。 這個 new Runnable() 依附於創建Handler的線程, 代碼如下 在絕對的UI線程中打印線程ID: System.o