學習記錄

1、 2015-4-8 html

1. 依賴注入java

2. ImageView的屬性android:scaleType的做用分析react

3. Android Service徹底解析,關於服務你所需知道的一切(上)linux

4. Android Service徹底解析,關於服務你所需知道的一切(下)android

 

2、2015-4-14ios

1. android--多個Ativity值傳遞FLAG_ACTIVITY_FORWARD_RESULTgit

2. Acitivity子類AliasActivity簡介和使用github

3. activity-alias的使用web

4. Android中改變Activity的不一樣icon:activity-alias
算法

5. 一個app,多個入口圖標,activity-alias實現多程序入口並顯示指定view完成

6. Custom filtering of intent chooser based on installed Android package name

7. 一些Android開發小提示

 

3、2015-4-17

1. [Android][Android Studio] *.jar 與 *.aar 的生成與*.aar導入項目方法

2. Android應用加入微信分享

 

4、2015-4-22

1. Android內存優化之一:MAT使用入門

2. Android內存優化之二:MAT使用進階

3. Android內存優化之三:打開MAT中的Bitmap原圖

4. Google利器Android Studio從入門到精通

5. 從Fragment被銷燬看replace和add的區別

6. 使用AIDL實現進程間的通訊

 

5、2015-4-23

1. Mastering the Android Touch System (不錯的演講)

2. 在Activity中使用Thread致使的內存泄漏

3. [Android][Android Studio] Gradle項目中添加JNI生成文件(.so文件)

4. Integrating .so files into your APK

sourceSets.main { jni.srcDirs = [] // This prevents the auto generation of Android.mk jniLibs.srcDir 'src/main/libs' // This is not necessary unless you have precompiled libraries(*.so file) in your project. }

5. Android異步消息處理機制徹底解析,帶你從源碼的角度完全理解

  Handler.sendMessage()

  Handler.post()

  View.post()

  Activity.runOnUiThread()

 

6、2015-4-28

1. 關於紅杏的公益代理, Android Studio以及freso的編譯

 

7、2015-4-29

1. Android 開發最佳實踐

2. Android Studio Tips -- 佈局預覽 (xmlns:tools)

3. Android Studio Tips -- 提取方法 (Alt+Shift+M)

 

8、2015-5-4

1. Android 深刻理解Android中的自定義屬性

  注意下,個人styleable的name寫的是test,因此說這裏並不要求必定是自定義View的名字。

  declare-styleable的確是能夠不寫的。

2. Android APK安裝包瘦身

3. Android Notes - Activity生命週期中的onSaveInstanceState

  只要某個Activity是作入棧而且非棧頂時(啓動跳轉其餘Activity或者點擊Home按鈕),此Activity是須要調用onSaveInstanceState的。

  若是Activity是作出棧的動做(點擊back或者執行finish),是不會調用onSaveInstanceState的。

4. Android Notes(02) - AIDL

5. Android Training - 避免程序無響應ANR

  你應該經過Process.setThreadPriority()並傳遞THREAD_PRIORITY_BACKGROUND來設置線程的優先級爲」background」:

    android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

  若是你不經過這個方式來給線程設置一個低的優先級,那麼這個線程仍然會使得你的應用顯得卡頓,由於這個線程默認與UI線程有着一樣的優先級。

6. Android Training - 代碼性能優化小技巧

  使用加強的For循環

  使用包級訪問而不是內部類的私有訪問

 

9、2015-5-6

1. Linux中18個tar命令示例

  Tar命令參數說明

  c:建立歸檔文件

  x:解壓歸檔文件

  v:顯示命令執行的進度

  f:指定歸檔文件的名字

  t:列出歸檔文件的內容

  z:用gzip過濾存檔

  j:用bzip2過濾存檔

  r:添加或更新歸檔文件中的文件或目錄

2. Android xml資源文件中@、@android:、@*、?的含義和區別

  引用自定義資源文件:android:text=」@string/hello」

  引用系統資源文件:

    android:drawable=」@android:drawable/dialog_frame」 (public資源)

    android:drawable="@*android:drawable/btn_list_attachment_delete_normal"(非public資源)

  引用主題屬性:android:textColor=」?android:textDisabledColor」

  

10、2015-5-7

1. Android加載不一樣DPI資源與內存消耗之間的關係

  內存消耗與圖片文件大小無關。

  hdpi 的手機加載低 dpi 資源,例如 ldpi,加載到內存前會先按比例拉伸。內存佔用確增大爲原來的 4 倍!

  若是圖片資源在 app 中放錯 dpi 文件夾,使用體驗會大打折扣,或者儘可能使用 9patch 圖片。

  // DENSITY_DEVICE 是設備的 DPI 大小, ResourceDensity 是設備加載的 DPI 文件夾對應的 DPI 大小

  Memory Consumption Size = Width * Height * (DENSITY_DEVICE / ResourceDensity)^2 * (Bit depth / 8)

2. Android Service與Activity之間通訊的幾種方式

  經過Binder對象

  經過broadcast(廣播)的形式

 

11、2015-5-9

1. 得到 LayoutInflater 實例的三種方式

  * LayoutInflater inflater = mActivity.getLayoutInflater();  //調用Activity的getLayoutInflater()

  * LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  * LayoutInflater inflater = LayoutInflater.from(context);

  * 這三種方式最終本質是都是調用的Context.getSystemService()。

2. 內存分析工具 MAT 的使用 

3. Java習慣用法總結

  * 不要像這樣使用重複的字符串鏈接:s += item ,由於它的時間效率是O(n^2)。

  * 優先使用StringBuilder,由於它更快。

  * StringBuffer的全部方法都是同步的,而你一般不須要同步的方法。

 

12、2015-5-13

1. Difference between getContext() , getApplicationContext() , getBaseContext()

  View.getContext(): Returns the context the view is currently running in. Usually the currently active Activity.

2. Execution failed for task ':imagepipeline:ndk_build_gifimage'.

  若是你遇到這個錯誤,多半是找不到ndk環境致使的 

 

十3、2015-5-15

1. HTTP 304狀態分析

  對於動態頁面,就是動態產生的頁面,每每沒有包含 Last Modified 信息,這樣瀏覽器、網關等都不會作緩存,也就是在每次請求的時候都完成一個 200 的請求。

  對於動態頁面作緩存加速,首先要在 Response 的 HTTP Header 中增長 Last Modified 定義,其次根據 Request 中的 If Modified Since 和被請求內容的更新時間來返回 200 或者 304 。

 

十4、2015-5-18

1. Activity與Fragment的生命週期

  OnCreate   <-> OnAttach - OnCreate - OnCreateView - OnActivityCreated

  OnStart     <-> OnStart

  ...

  OnDestroy <-> OnDestroyView - OnDestroy - OnDetach

2. java 列表、集合與數組之間的轉化 

  Object[] array = list.toArray();

  list = Arrays.asList(array);

  set = new HashSet(list); 

  array = set.toArray();

 

十5、2015-5-20

1. 如何用Fiddler對Android應用進行抓包

  Fiddler如何監測VirtualBox中windows系統的網絡請求:以VirtualBox爲例

  1. VirtualBox [設置] – [網絡]  – [網卡1] – 在網絡選項卡中將[鏈接方式]改成 Bridged Adapter[橋接網卡](默認爲NAT)
  2. Fiddler 工具欄 Tools – Fiddler Options – Connections 中勾選 Allow Remote Computers to Connect
  3. 查看虛擬機的IP地址 [cmd] - [ipconfig],如 192.168.0.7
  4. 打開Android設置,長按當前wifi鏈接,設置HTTP代理,將服務器填爲上一步中得到的IP,即192.168.0.7,端口填8888

 

十6、2015-5-25

1. Fiddler 教程

  

十7、2015-5-27

1. android開發中,可能會致使內存泄露的問題

 

  數字2:在這些類中去layout inflate是合法的,可是會使用系統默認的主題樣式,若是你自定義了某些樣式可能不會被使用(LayoutInflater.from(mContext.getApplicationContext))。

 

十8、2015-5-28

1. MVC,MVP 和 MVVM 的圖示

2. How to use MVVM pattern in Android (Droidcon Krakow 2014) (PPT演示)

3. Android MVVM框架RoboBinding初探 

4. Linux grep命令過濾關鍵字

  若是你是想只顯示配置文件中的以 # 號開頭的行,那就使用
  # grep ^# filename
  若是是想顯示除 # 號開頭的行的話呢,只需加個參數-v (-v 表示相反的過濾)就好了
  # grep -v ^# filename 

5. armeabi armeabi-v7a mips x86 理解 

  雖然armeabi通用性強,但速度慢,而v7a能充分發揮v7a CPU的能力。armeabi就是針對普通的或舊的armcpu,armeabi-v7a是針對有浮點運算或高級擴展功能的arm cpu。x8六、mips同理。

 

十9、2015-5-29

1. android圖片壓縮質量參數Bitmap.Config RGB_565等的含義

2.Exception OutofMemoryError dalvik.system.VMRuntime.newNonMovableArray(Native Method)

  Try enabling large heap support, by adding this to your AndroidManifest.xml file:

  <application android:largeHeap="true"

  Also, you can reduce the memory required for your Bitmaps by using the Bitmap.Config type RGB_565 instead of ARGB_8888.

3. 2015 Google hosts

 

二10、2015-5-30

1. Activity啓動模式圖文詳解:standard, singleTop, singleTask 以及 singleInstance

2. 細說Java單例模式

  • 懶漢方式。指全局的單例實例在第一次被使用時構建。
  • 餓漢方式。指全局的單例實例在類裝載時構建。

  在執行類的初始化期間,JVM會去獲取一個鎖。

  反射的某些地方繞過了java機制的限制,private只在編譯時進行權限的限制,可是在運行時是不存在這種權限的限制的 。

  使用enum實現的單例自帶防序列化與防反射(抽象類)功能。

3. Java 理論與實踐: 正確使用 Volatile 變量

  Java 語言中的 volatile 變量能夠被看做是一種 「程度較輕的 synchronized」;與 synchronized 塊相比,volatile 變量所需的編碼較少,而且運行時開銷也較少,可是它所能實現的功能也僅是 synchronized 的一部分。

4. 雙重檢查鎖定與延遲初始化 (單例模式)

  雙重檢查鎖定看起來彷佛很完美,但這是一個錯誤的優化!在線程執行到第4行代碼讀取到instance不爲null時,instance引用的對象有可能尚未完成初始化(發生重排序)。

  [在JDK1.5以後(1.5以前沒有volatile關鍵字),可使用volatile變量禁止指令重排序,讓DCL生效]

  基於volatile的雙重檢查鎖定的解決方案(double-check idiom):

  private volatile static Instance instance;

  基於類初始化的解決方案(lazy initiallization holder class idiom):

  public static Instance getInstance() {
      return InstanceHolder.instance ;  //這裏將致使InstanceHolder類被初始化
   }

  對於實例域,使用雙重檢查模式(double-check idiom):性能考慮,避免域初始化後訪問這個域的鎖定開銷

  對於靜態域,使用(lazy initiallization holder class idiom):現代的VM將在初始化類的時候,同步域的訪問

 

二11、2015-6-1

1. failed to find Build Tools revision 21.1.1 - sdk up to date

  Get Build Tools revision 21.1.2
    sudo android update sdk --no-ui --all --filter build-tools-21.1.2
  Help:
    sudo android update sdk --help

  Get list of available Android SDK updates:
    sudo android list sdk --extended --all

2. Android View.OnTouchListener 的子類

 

二12、2015-6-2

1. Git 經常使用命令

2. 公共技術點之面向對象六大原則(以Volley爲例)

  單一職責原則:單一職責原則並非說一個類只有一個函數,而是說這個類中的函數所作的工做必需要是高度相關的,也就是高內聚。

  里氏替換原則:里氏替換原則就是依賴於繼承、多態這兩大特性。里氏替換原則簡單來講就是全部引用基類的地方必須能透明地使用其子類的對象。

  依賴倒置原則:模塊間的依賴經過抽象發生,實現類之間不發生直接的依賴關係,其依賴關係是經過接口或抽象類產生的。

  開閉原則:對擴展開放,對修改關閉。

  接口隔離原則:當一個接口太大時,咱們須要將它分割成一些更細小的接口,使用該接口的客戶端僅需知道與之相關的方法便可。

  迪米特原則:一個對象應該對其餘對象有最少的瞭解。

3. java.lang.IllegalArgumentException: pointerIndex out of range(multiple-touch)

  // create an action int action = (event.getActionMasked() & MotionEvent.ACTION_MASK); // getting pointerindex int pointerIndex = ((event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT); //catch invalide if(pointerIndex == MotionEvent.INVALID_POINTER_ID){ return; }

  使用event.getX(pointerIndex)而不是event.getX(),以防止多點觸控報異常。

  Beside, see http://stackoverflow.com/questions/6919292/pointerindex-out-of-range-android-multitouch 

  http://stackoverflow.com/questions/27662682/illegalargumentexception-pointerindex-out-of-range-from-swiperefreshlayout

  calling findPointerIndex(ev, activePointer) returns -1 if it fails to find. Preventing dispatching touch event with invalid pointer less than 0 and pointer index greater or equal than pointer count for that event will probably prevent validation of pointer inside native MotionEvent implementation from throwing IAE. 

    int pointerCount = MotionEventCompat.getPointerCount(ev); int index = MotionEventCompat.getActionIndex(ev); int activePointerId = MotionEventCompat.getPointerId(ev, index); int pointerIndex = MotionEventCompat.findPointerIndex(ev,activePointerId);

 

二十3、2015-6-4

1. Google Chrome快捷鍵大全

  Ctrl+1 到 Ctrl+8 切換到指定位置編號的標籤頁。

  Ctrl+Tab 或 Ctrl+PgDown 切換到下一個標籤頁

  Ctrl+W 或 Ctrl+F4 關閉當前標籤頁或彈出式窗口

  Ctrl+J 查看」下載」頁

 

 

二十4、2015-6-8

1. 去掉 radio 或 checkBox 的默認圖標

  xml: android:button="@null"

  java: checkBox.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));

 

2. GridView的OnItemClickListener不響應問題

  gridview中有節點是xxxbutton,點擊事件會被xxxbutton攔截了,因此OnItemClickListener不會被callback。

  checkbox控件也會攔截點擊事件。

 

二十5、2015-6-9

1. Android Studio 快捷鍵

  Ctrl+Shift+/:模塊註釋,反註釋再按一次便可,注意這邊的」/「不能用小鍵盤的
  Ctrl+Shift+小鍵盤/:摺疊代碼
  Ctrl+[或]能夠跳到大括號的開頭結尾
  Shift+Click能夠關閉文件

 

二十6、2015-6-11

1. LeakCanary: 讓內存泄露無所遁形

  Android 和 Java 內存泄露檢測。

 

二十7、2015-6-13

1. Android屏幕適配全攻略(最權威的官方適配指導)

  在Android中,規定以160dpi爲基準,1dip=1px,若是密度是320dpi,則1dip=2px,以此類推。

  android:layout_weight的真實含義是:若是View設置了該屬性而且有效,那麼該 View的寬度等於原有寬度(android:layout_width)加上剩餘空間的佔比。

  假如咱們的寬度不是0dp(wrap_content和0dp的效果相同),而是match_parent,佔比和上面正好相反。

 

二十8、2015-6-25

1. Linux的五個查找命令

2. Git遠程操做詳解

3. 推薦幾個很是有用的工具

4. java反射機制

5. Java Enum

6. Fragment onOptionsItemSelected not being called

   However the activity gets a chance to handle the event first, so the system calls onOptionsItemSelected() on the activity before calling the same callback for the fragment.

7. Android Studio : Failure [INSTALL_FAILED_OLDER_SDK]

   I now I solved my problem by changing the AVD (I'm using Genymotion) to API 19.

  手機SDK(系統)版本比build.gradle中設置的minSdkVersion低.

8. ANDROID – 基於 ACTIONBARCOMPAT(APPCOMPAT) 的 ACTION BAR STYLE 設定

  getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.my_color));
  int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
  TextView titleView = (TextView)findViewById(titleId);
  titleView.setTextColor(getResources().getColor(android.R.color.black));

   這邊須要透過  Resources.getSystem().getIdentifier("action_bar_title", "id", "android") 來取得 ActionBar Title 的 ID,然後再設定其 TextView 來設定文字顏色,範例中的顏色就直接以系統色碼 – 黑色來取代之,完成結果以下。

9. Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

   Usually it's due to having a signed release version on my phone, then trying to deploy the debug version on top. 

 

二十9、2015-6-26

1. ! [remote rejected] master -> refs/for/master (no changes made)

  I was trying to push a new change, on top of a change which was still up for review, who's parent also was up for review.

  $ git reset --hard HEAD^

  $ git cherry-pick (commitId)

  $ git push origin master:refs/for/master

 

三10、2015-7-8

1. Is there a unique Android device ID?

  SN序列號:android.os.Build.SERIAL

  IMEI:((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();

 

2. setCompoundDrawables與setCompoundDrawablesWithIntrinsicBounds的區別

  setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)

    Sets the Drawables (if any) to appear to the left of, above, to the right of, and below the text. Use null if you do not want a Drawable there. The Drawables' bounds will be set to their intrinsic bounds.

  setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)

    Sets the Drawables (if any) to appear to the left of, above, to the right of, and below the text. Use null if you do not want a Drawable there. The Drawables must already have had setBounds(Rect) called.

 

三11、2015-7-15

1. Android開發必備工具

 

三12、2015-7-17

1. Everpad in Unbuntu(印象筆記)

 

三十3、2015-7-21

1. Synchronized和Static Synchronized區別

  由於是static synchronized,因此不一樣實例之間仍然會被限制

  A: synchronized static是某個類的範圍,synchronized static cSync{}防止多個線程同時訪問這個 類中的synchronized static 方法。它能夠對類的全部對象實例起做用

  B: synchronized 是某實例的範圍,synchronized isSync(){}防止多個線程同時訪問這個實例中的synchronized 方法。

 

2. Java - synchronizing static methods

  "Avoid lock on static methods: worst solution is to put the "synchronized" keywords on the static methods, which means it will lock on all instances of this class."

 

三十4、2015-7-23

1. Canvas的save和restore

  saverestore要配對使用(restore能夠比save少,但不能多),若是restore調用次數比save多,會引起Error

 

2. AnimatorSet: Circular dependencies cannot exist

   Don't reuse the AnimatorSet, create a new one and it will be ok. The builder is accumulating the values and therefore creating a loop (the animation depending on itself in the "before")

 

3. Android屬性動畫徹底解析(上),初識屬性動畫的基本用法

4. Android屬性動畫徹底解析(中),ValueAnimator和ObjectAnimator的高級用法

5. Android屬性動畫徹底解析(下),Interpolator和ViewPropertyAnimator的用法

 

6. Android 屬性動畫(Property Animation) 徹底解析 (上)

7. Android 屬性動畫(Property Animation) 徹底解析 (下)

 

8. Android RSA加密解密

9. 貝塞爾曲線掃盲

 

三十5、2015-7-25

1. Android利用canvas畫各類圖形(點、直線、弧、圓、橢圓、文字、矩形、多邊形、曲線、圓角矩形)

2. Android 設置圖片 Bitmap任意透明度 

  最高位就是Alpha通道的值,對齊進行改變後再新建一個Bitmap

  設置canvas的Paint的透明度,而後經過canvas.drawBitmap()來改變View的透明度

 

三十6、2015-7-27

1. Android佈局優化之ViewStub、include、merge使用與源碼分析

  在include時設置了id,會複寫原佈局根元素的id

  在中ViewStub設置了inflatedId,會複寫原佈局根元素的id

 

2. 詳解Eclipse斷點 

3. Android Studio 權威教程 

4. Android Studio IDE: Break on Exception

 

三十7、2015-7-29

1. android:descendantFocusability屬性在ListView中的妙用

  一般會遇到listview的每一項沒法響應點擊的問題,由於消息還沒傳回每一項的viewgroup就被其子view消費了

  只須要在每一項Item佈局的根佈局加上android:descendantFocusability=」blocksDescendants」的屬性就行了

 

三十8、2015-7-31

1. ViewPager -- Fragment 切換卡頓 性能優化

  Fragment輕量化,精簡Fragment的佈局

  防止Fragment被銷燬

  Fragment內容延遲加載

 

三十9、2015-8-1
1. Android 圖片Bitmap的剪切

2. android中的matrix的簡單應用

3. Android圖片旋轉,縮放,位移,傾斜,對稱完整示例(一)——imageView.setImageMatrix(matrix)和Matrix 

4. Android圖片旋轉,縮放,位移,傾斜,對稱完整示例(二)——Bitmap.createBitmap()和Matrix

5. Android Immutable bitmap crash error

 

四10、2015-8-5

1. How to use ActionMenuView?

  自定義系統菜單項

 

2. android動態顯示和隱藏status bar(通知欄) 

 

四11、2015-8-6

1. Android Studio利用Gradle刪除沒有使用到的資源和代碼文件

  android {
        buildTypes {
            release {
                minifyEnabled true
                shrinkResources true
            }
        }
    }

 

2. ViewTreeObserver的經常使用技巧 

  ViewTreeObserver.OnGlobalLayoutListener,                       // 用於監聽佈局之類的變化,好比某個控件消失了

 

四12、2015-8-7

1. 微信分享:代碼混淆以後,會致使沒法彈出發送第三方消息的確認框

  可以調起微信到選擇好友列表,可是點擊發送後無響應,請檢查proguard配置是否對微信SDK代碼進行了混淆,建議不要對SDK對混淆,參考如下proguard配置:

  -keep class com.tencent.mm.sdk.** {

     *;

  }

 

四十3、2015-8-8

1. Android Studio's debugger not stopping at breakpoints within library modules

  As stated in the comments of this issue, setting minifyEnabled false in the debug build is the best practice. By setting this variable in the app module you are disabling the entire proguard build process. It is useful when optimizing the release build, but gives some problems if you are testing and developing.

 

2. Android開發筆記——圓角和邊框們

 

四十4、2015-8-10

1. Android TextView中文字經過SpannableString來設置超連接、顏色、字體等屬性

 

四十4、2015-8-11

1. Java靜態內部類、匿名內部類、成員式內部類和局部內部類

  內部類能夠是靜態(static)的,可使用 public、protected 和 private 訪問控制符,而外部類只能使用 public,或者默認。

  非靜態內部類中不能聲明任何 static 成員(變量)。[注意這裏說的是變量,常量(也就是final static修飾的屬性)仍是能夠的]

  局部類不能夠是 static 的,裏邊也不能定義 static 成員;

  局部類不能夠用 public、private、protected 修飾,只能使用缺省的;

2. 使用靜態內部類提升封裝性

  靜態內部類有兩個優勢:增強了類的封裝性和提升了代碼的可讀性

  提升封裝性:靜態內部類是外部類的子行爲或子屬性,二者直接保持着必定的關係

  內部類持有一個外部類的引用,能夠自由訪問。

  `靜態內部類不持有外部類的引用

  `靜態內部類不依賴外部類

  `普通內部類不能聲明static的方法和變量

3. 單例模式(DCL缺陷以及如何安全發佈對象)

  Happen-Before規則 

4. 內部Handler類引發內存泄露

  該消息引用了Activity的Handler對象,而後這個Handler又引用了這個Activity。這些引用對象會保持到該消息被處理完,這樣就致使該Activity對象沒法被回收,從而致使了上面說的 Activity泄露。

5. Java中內部類的內存泄露問題

   Java中內部類(匿名內部類也同樣)會有宿主類的強引用。 

6. java內存泄露緣由總結

  當集合裏面的對象屬性被修改後,再調用remove()方法時不起做用。

  靜態集合類引發內存泄露。

  單例模式:單例對象在被初始化後將在JVM的整個生命週期中存在(以靜態變量的方式)。

7. Handler可能致使的內存泄漏及其優化 

  使用靜態內部類和弱引用。

8. 強引用,軟引用,弱引用,虛引用 

  若是一個對象具備弱引用,那麼當GC線程掃描的過程當中,一旦發現了只具備弱引用的對象,無論當前內存空間足夠與否,都會回收它的內存。

  但因爲垃圾回收器是一個優先級很低的線程,所以不必定會很快發現那些只具備弱引用的對象。

9. Android 消息處理機制之二: Message 中 obtain()源代碼剖析 

  獲取Message對象的時候是不能用 "new Message" 的方式來獲取,而必須使用Message.Obtain()的方式來獲取Message對象

 

四十5、2015-8-17

1. Android AppWidget系統框架

2. Make Your Background Moving Like on the Play Music App (Playing with ImageView.setImageMatrix)

  don’t forget to set the MATRIX scaleType: 

  ImageView.setScaleType(ScaleType.MATRIX) / android:scaleType="matrix"

 

3. adb logcat 查看日誌

  adb logcat ActivityManager:I MyApp:D *:S (輸出標記爲「ActivityManager」而且優先級大於等於「Info」和標記爲「MyApp」而且優先級大於等於「Debug」的日誌)

  adb logcat -v time (顯示時間)

 

四十6、2015-8-18

1. Centering Textview Below a image button that is under relative layout?(文本與圖片居中對齊)

  just align its start and end together, the result is the TextView aligned to the center:

  android:layout_alignStart="@id/my_image_view"

  android:layout_alignEnd="@id/my_image_view"

  note:  the width of the text will be limited to the width of the icon 

 

四十7、2015-8-19

1. Android編程獲取網絡鏈接狀態(3G/Wifi)及調用網絡配置界面

  Context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接進入手機中的wifi網絡設置界面

 

四十8、2015-8-22

1. How to increase Android Studio memory limit in Mac

  Xmx specifies the maximum memory allocation pool for a Java Virtual Machine (JVM), while Xms specifies the initial memory allocation pool.  

 

四十9、2015-8-25

1. android listView 到上下邊界 藍色或黃色陰影去除方法

  在2.3以前能夠在listview的屬性中經過設置android:fadingEdge="none"來解決問題,可是在2.3及以上這個是不行的

  這裏,能夠經過代碼來設置模式,禁止其陰影的出現:

  if(Integer.parseInt(Build.VERSION.SDK) >= 9){
    this.setOverScrollMode(View.OVER_SCROLL_NEVER);
  }

 

五10、2015-8-26

1. Android AlertDialog去掉系統黑色背景

  dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 

 

五11、2015-8-28

1. Android中若是你也使用commons-codec-1.6而且出現了問題

  Google Android內部也有一個包名同樣的工程,並且類名也相同,關鍵一點是沒有該方法!因而致使包名衝突。

 

2. url parameters and map the transformation between

3. ArrayList內元素按照字典排序 

  Collections.sort(arl,new Realize_Comparator());

 

五12、2015-8-30

1. Android動畫學習筆記-Android Animation

2. Convert View To Bitmap

3. Android SQLite調試

   adb shell setprop log.tag.SQLiteLog V

4. Android動態改變佈局

   軟鍵盤的彈出隱藏用OnGlobalLayoutListener監聽實現

5. Android App Launching Made Gorgeous(Starting Window)

  Simply add the android:windowBackground into default application/activity's theme solve the problem.

 

五十3、2015-9-15

1. android:scrollbarStyle屬性及滾動條和分割線覆蓋問題

  insideOverlay:默認值,表示在padding區域內而且覆蓋在view上
  insideInset表示在padding區域內而且插入在view後面
  outsideOverlay:表示在padding區域外而且覆蓋在view上,推薦這個
  outsideInset:表示在padding區域外而且插入在view後面

2. Google Java編程風格指南

  列限制:80或100

  不要使用組合聲明,好比int a, b;須要時才聲明,並儘快進行初始化

  中括號是類型的一部分:String[] args, 而非String args[]

  在一個switch塊內,經過一條註釋來講明程序將繼續執行到下一個語句組(// fall through)

  每一個switch語句都包含一個default語句組,即便它什麼代碼也不包含。

  類和成員的modifiers若是存在,則按Java語言規範中推薦的順序出現:(public abstract static final synchronized)

  public protected private abstract static final transient volatile synchronized native strictfp

  包名所有小寫,連續的單詞只是簡單地鏈接起來,不使用下劃線。

  每一個常量都是一個靜態final字段,但不是全部靜態final字段都是常量。

  Tip:不要使用finalize。若是你非要使用它,請先仔細閱讀和理解Effective Java 第7條款:「Avoid Finalizers」,而後不要使用它。

 

五十4、2015-9-16

1. MAT - Memory Analyzer Tool 使用進階

 

五十5、2015-9-24

1. onTrimMemory方法中的內存級別

  Note: 當系統開始清除LRU緩存中的進程時,儘管它首先按照LRU的順序來操做,可是它一樣會考慮進程的內存使用量。所以消耗越少的進程則越容易被留下來

 

五十6、2015-10-10

1. 使用setDrawingCacheEnabled(boolean flag)提升繪圖速度

  void setDrawingCacheEnabled(boolean flag),

  Bitmap getDrawingCache(boolean autoScale),

  void buildDrawingCache(boolean autoScale),

  void destroyDrawingCache()

 

五十7、2015-10-21

1. java 如何使的float保留2位或者多位小數

  float a = 123.2334f;
  float b = (float) (Math.round(a * 100)) / 100; // (這裏的100就是2位小數點,若是要其它位,如4位,這裏兩個100改爲10000)

  Math.round()方法表示「四捨五入」 ,算法爲Math.floor(x+0.5),即將原來的數字加上0.5後再向下取整

2. Android計算文件的MD5和SHA1 

3. How to generate an MD5 checksum for a file in Android?

 

五十8、2015-10-24

1. 使用 git rebase -i 合併提交

  git rebase -i HEAD~3

2. ExecutorService生命週期

3. Android實戰技巧:深刻解析AsyncTask 

  Android 3.0開始對AsyncTask的API作出了一些調整:#execute()提交的任務,按前後順序每次只運行一個

  若是你真想並行執行任務,你可使用另一個版本:使用THREAD_POOL_EXECUTOR參數的executeOnExecutor方法

  AsyncTask.executeOnExecutor(Executors.newSingleThreadExecutor());

4. AsyncTask執行順序

   AsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)你也能夠採用這個系統提供的線程池來處理你的任務

  系統默認的線程池能夠須要等待,它默認是按順序執行(THREAD_POOL_EXECUTOR)或者最多執行5個(SerialExecutor)

  使用自定義的線程池,這樣就能夠即便的執行你的任務需求:new AsyncTask.executeOnExecutor((ExecutorService)Executors.newCachedThreadPool())

5. Android的線程池:ExecutorService和Executors簡單介紹

6. Pressed狀態和clickable, duplicateParentState的關係

   當設置setDuplicateParentStateEnabled爲true時,View的DrawableState直接使用了其parent的。因此,他的drawable狀態會一直保持與其parent同步。

 

五十9、2015-10-26

1. Java中的ReentrantLock和synchronized兩種鎖定機制的對比

  咱們何時才應該使用 ReentrantLock 呢?答案很是簡單 —— 在確實須要一些 synchronized 所沒有的特性的時候,好比時間鎖等候、可中斷鎖等候、無塊結構鎖、多個條件變量或者鎖投票。

2. ReentrantLock可重入鎖的使用場景

3. ReentrantLock與synchronized

4. ReentrantLock(重入鎖)以及公平性 

 

六10、2015-10-27

1. 給 Android 開發者的 RxJava 詳解

  一個在 Java VM 上使用可觀測的序列來組成異步的、基於事件的程序的庫

2. Android之取消ViewPager+Fragment的預加載(懶加載)

   setUserVisibleHint每次fragment(左右切換)顯示與隱藏都會調用,他的調用順序優於onCreate,須要進行一些狀態的判斷。

3. Andriod開發技巧——Fragment的懶加載

 

六11、2015-10-28

1. 當有多個設備online時,命令行窗口經過adb鏈接指定設備方法

  $ adb devices

  $ adb -s <serial number> cmd

  $ adb -s SH0A6PL00243 logcat

 

六12、2015-11-13

1. RecyclerView android:layout_width="match_parent"無效

  View view = mInflater.from(mContext).inflate(R.layout.item_fra_main2, parent, false);

  //View view = View.inflate(parent.getContext(), R.layout.item_fra_main2, null);// match_parent無效

 

六十3、2015-11-16

1. URL encoding(百分號編碼)

  若是一個保留字符在特定上下文中具備特殊含義(稱做"reserved purpose") , 且URI中必須使用該字符用於其它目的, 那麼該字符必須百分號編碼. 百分號編碼一個保留字符。

  例如,"/", 若是用做URI的路徑成分的分界符, 則是具備特殊含義的保留字符. 若是該字符須要出如今URI一個路徑成分的內部, 則三字符序列"%2F"或"%2f"就用於代替本來的"/"出如今該URI路徑成分的內部.

  2005年1月發佈的RFC 3986,強制全部新的URI必須對未保留字符不加以百分號編碼

  其它字符要先轉換爲UTF-8字節序列, 而後對其字節值使用百分號編碼

2. Android RecyclerView 使用徹底解析 體驗藝術般的控件 

 

六十4、2015-11-26

1. Android中Activity四種啓動模式和taskAffinity屬性詳解

  任務(Task)不只能夠跨應用(Application),還能夠跨進程(Process)[由android:taskAffinity決定所在任務棧(Task)]

  在啓動一個singleTask的Activity實例時,若是系統中已經存在這樣一個實例,就會將這個實例調度到任務棧的棧頂,並清除它當前所在任務中位於它上面的全部的activity。

  singleInstance老是在新的任務中開啓,而且這個新的任務中有且只有這一個實例,也就是說被該實例啓動的其餘activity會自動運行於另外一個任務棧中。

2. Improving UX with RxJava

  Add throttling behaviour: debounce() is what you usually need.

  Kill the previous requests: introduce switchMap instead of flatMap.

  No error functionality / no network functionality: You need a retry mechanism for these.

RxTextView.textChanges(searchEditText)
     .debounce(150, MILLISECONDS)  // throttling behaviour
     .switchMap(Api::searchItems)  // Kill the previous requests
     .retryWhen(new RetryWithConnectivityIncremental(context, 5, 15, SECONDS))  // a retry mechanism
     .subscribe(this::updateList, t->showErrorToUser());

3. Observe on the correct thread

  • The .subscribeOn() changes the Scheduler where the Observable should operate.
  • The .observeOn() changes the Scheduler where the Observable will send notifications.
  • Additionally you need to know that by default, the chain of operators will work on the same thread on which its .subscribe() method is called.

  Instead of doing this: Observable.just(1,2,3).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).flatMap(/** logic which doesn't touch ui **//).subscribe();

  do this: Observable.just(1,2,3).subscribeOn(Schedulers.newThread()).flatMap(/** logic which doesn't touch ui **//).observeOn(AndroidSchedulers.mainThread()).subscribe();

  Earlier .subscribeOn() wins.

 

六十5、2015-11-27

1. Rxjava分析—Subject

  AsyncSubject僅釋放Observable釋放的最後一個數據,而且僅在Observable完成以後(subject.onComplete())。

observer will receive no onNext events if the subject.onCompleted() isn't called.

  當Observer訂閱了一個BehaviorSubject,它一開始就會釋放Observable最近釋放的一個數據對象,當尚未任何數據釋放時,它則是一個默認值。

  PublishSubject:僅會向Observer釋放在訂閱以後Observable釋放的數據。

  無論Observer什麼時候訂閱ReplaySubject,ReplaySubject會向全部Observer釋放Observable釋放過的數據。

2. RxDocs-Subject

  假設你有一個Subject,你想把它傳遞給其它的代理或者暴露它的Subscriber接口,你能夠調用它的asObservable方法,這個方法返回一個Observable。具體使用方法能夠參考Javadoc文檔

  若是你把 Subject 看成一個 Subscriber 使用,注意不要從多個線程中調用它的onNext方法(包括其它的on系列方法),這可能致使同時(非順序)調用,這會違反Observable協議,給Subject的結果增長了不肯定性。

  要避免此類問題,你能夠將 Subject 轉換爲一個 SerializedSubject ,相似於這樣:

  mySafeSubject = new SerializedSubject( myUnsafeSubject );

 

六十6、2015-12-10

1. Android Otto框架淺析

  事件總線機制:A不須要調用B類的方法,而僅僅須要產生併發出 一個「事件通知」, 若是B訂閱了該「事件」 那麼它將會接受到這個事件,作出相應的操做。這樣就被解耦了。

2. 謎之RxJava (一) —— 最基本的觀察者模式

3. 用 Retrofit 2 簡化 HTTP 請求

 

六十7、2015-12-12

1. Android實戰技巧:ViewStub的應用

  某些佈局屬性要加在ViewStub而不是實際的佈局上面,纔會起做用,好比上面用的android:layout_margin*系列屬性,若是加在TextView上面,則不會起做用,須要放在它的ViewStub上面纔會起做用。而ViewStub的屬性在inflate()後會都傳給相應的佈局。

 

六十8、2015-12-12

1. Android多個Activity切換時其生命週期中的方法執行順序

  A.onPause() -> B.onCreate()/onRestart() -> B.onStart() -> B.onResume -> A.onStop()

 

六十9、2015-12-13

1. MVC和MVP在app中的對比分析以及實際應用

  MVC:View裏會包含Model信息,不可避免的還要包括一些業務邏輯。更改View也是比較困難的,至少那些業務邏輯是沒法重用的。

  MVP:經過定義好的接口進行交互,從而使得在變動View時候能夠保持Presenter的不變(重用)。咱們能夠將一個Presenter用於多個視圖,而不須要改變Presenter的邏輯。

       還能夠編寫測試用的View,模擬用戶的各類操做,從而實現對Presenter的測試而不須要使用自動化的測試工具。能夠脫離用戶接口來測試這些邏輯(單元)。

       Activity能夠把全部邏輯給Presenter處理,這樣Java邏輯就從手機的Activity中分離出來!

       View只應該有簡單的Set/Get的方法,用戶輸入和設置界面顯示的內容,除此就不該該有更多的內容,毫不允許直接訪問Model。

2. MVP框架 – Ted Mosby的軟件架構

  「Model」,指的是檢索或控制一個model的業務邏輯層。

  理論上來講presenter和業務邏輯層都是純舊式的可以與桌面應用或其餘任何java應用共享的java代碼。(不被綁定到Android平臺上)。

  定義一個專門的接口能夠提升代碼可讀性,而且未來能夠靈活地定義更多其餘的與View相關的方法。

3. 我爲何主張反對使用Android Fragment

  Fragment提交事務異步的,並且是附加在主線程Handler隊列尾部的。 

 

七10、2015-12-17

1. Android應用啓動優化:一種DelayLoad的實現和原理

  Activity 的 onCreate/onStart/onResume三個回調中,並無執行Measure和Layout操做, 這個是在後面的performTraversals中才執行的.

  getWindow().getDecorView().post(new Runnable()); // 第二個 performTraversals 方法執行完成後立刻就執行Runnable了

2. 給 App 提速:Android 性能優化總結(-)

 

七11、2015-12-20

1. 有什麼好用的Android Studio的插件值得推薦?(-)

2. 凱子哥帶你學framework-Activity界面顯示全解析(-)

 

七12、2015-12-25

1. ubuntu安裝 JDK 及 android studio,adb 命令配置

2. Android Performance Case Study(-)

3. 15個必知的Android開發者選項

4. Android應用架構(!)

 

七十3、2015-12-28

1. Android Recyclerview GridLayoutManager column spacing

 

七十4、2015-12-29

1. ScrollView裏面嵌套ListView,RecyclerView

  直接嵌套會有老是問題,須要重寫onMeasure()方法。

 

七十5、2015-12-30

1. Retrofit — Using the Log Level to Debug Requests(Retrofit 1)

RestAdapter.Builder builder = new RestAdapter.Builder()
    .setEndpoint(API_LOCATION)
    .setLogLevel(RestAdapter.LogLevel.FULL) // this is the important line
    .setClient(new OkClient(new OkHttpClient()));

2. RxJava變換操做符:.concatMap( )與.flatMap( )的比較

  flatMap()使用merge()操做符,而concatMap()使用concat()。

  flatMap()可能交錯的發送事件,最終結果的順序可能並是不原始Observable發送時的順序。

  concatMap()遵循元素的順序

3. Capturing executor for current thread

 

七十6、2016-1-6

1. Android開發中的MVP架構(!)

 

七十7、2016-1-8

1. Android 屬性 allowBackup 安全風險淺析

  Android API Level 8 及其以上 Android 系統提供了爲應用程序數據的備份和恢復功能。

  此功能的開關決定於該應用程序中AndroidManifest.xml 文件中的 allowBackup 屬性值,其屬性值默認是 True

  爲了安全起見,開發者務必將 android:allowBackup 標誌值設置爲 false 來關閉應用程序的備份和恢復功能,以避免形成信息泄露和財產損失。

相關文章
相關標籤/搜索