1,handler機制 在android中的一個異步回調,一個handler容許發送和處理message和runable對象,這些對象和一個線程的MessageQueue相關聯。每個線程實例和一個單獨的線程以及線程messageQueue相關聯。每個消息都要制定一個handler,經過Handler建立消息即可以完成此功能,將引入到消息隊列中。UI主線程建立一個handler是經過threadlocal建立一個looper,這個looper和主線程一一對應,使用threadlocal是保證每個線程惟一個looper,能夠直接使用,初始化looper的時候建立一個messageQueue,主線程,消息循環,消息隊列。Hander持有對UI主線程消息隊列MessageQueue和消息循環Looper的引用,子線程能夠經過Handler將消息發送到UI線程的消息隊列MessageQueue中。android
2,AIDL android interface define language 數據庫
是進程間的通訊,activity和service之間和在不一樣service之間的通訊。IPC機制是面向接口的,它是使用代理類在客戶端和實現端傳遞數據,使用AIDL實現IPC服務的步驟是:1. 建立.aidl文件-該文件(YourInterface.aidl)定義了客戶端可用的方法和數據的接口。2. 在makefile文件中加入.aidl文件-(Eclipse中的ADT插件提供管理功能)Android包括名爲AIDL的編譯器,位於tools/文件夾。3. 實現接口-AIDL編譯器從AIDL接口文件中利用Java語言建立接口,該接口有一個繼承的命名爲Stub的內部抽象類(而且實現了一些IPC調用的附加方法),要作的就是建立一個繼承於YourInterface.Stub的類而且實如今.aidl文件中聲明的方法。4. 向客戶端公開接口-若是是編寫服務,應該繼承Service而且重載Service.onBind(Intent) 以返回實現了接口的對象實例。緩存
3,android自定義view的實現方法異步
自定義View的實現方式大概能夠分爲三種,自繪控件、組合控件、以及繼承控件,有時候在作開發的時候,android提供給咱們的視圖並不能知足咱們的要求,因此有時候咱們須要本身建立本身的view。 咱們只須要將咱們想要的繼承於View,而後重寫裏面的方法就能夠了。oop
package com.example.view;字體
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;this
public class MyTextView extends TextView {spa
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setTextColor(Color.BLUE);// 將字體設置成藍色
}插件
}線程
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.myviewtest01
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world" />
</RelativeLayout>
package com.example.myviewtest;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.MyTextView);
String name = ta.getString(R.styleable.MyTextView_fontSize);
System.out.println("name=" + name);
this.setTextSize(ta.getDimension(R.styleable.MyTextView_fontSize, 10));
}
public MyTextView(Context context) {
super(context);
}
}
4,android內存優話
JDK 1.2版本開始,把對象的引用分爲4種級別,從而使程序能更加靈活地控制對象的生命週期。這4種級別由高到低依次爲:強引用、軟引用、弱引用和虛引用。
i. 強引用(StrongReference)強引用是使用最廣泛的引用。若是一個對象具備強引用,那垃圾回收器毫不會回收它。當內存空間不足,Java虛擬機寧願拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具備強引用的對象來解決內存不足的問題。
ii. 軟引用(SoftReference)若是一個對象只具備軟引用,則內存空間足夠,垃圾回收器就不會回收它;若是內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就能夠被程序使用。軟引用可用來實現內存敏感的高速緩存。
iii. 弱引用(WeakReference)在垃圾回收器線程掃描它所管轄的內存區域的過程當中,一旦發現了只具備弱引用的對象,無論當前內存空間足夠與否,都會回收它的內存。不過,因爲垃圾回收器是一個優先級很低的線程,所以不必定會很快發現那些只具備弱引用的對象。
iv. 虛引用(PhantomReference)顧名思義,就是形同虛設。與其餘幾種引用都不一樣,虛引用並不會決定對象的生命週期。若是一個對象僅持有虛引用,那麼它就和沒有任何引用同樣,在任什麼時候候均可能被垃圾回收器回收。瞭解並熟練掌握這4中引用方式,選擇合適的對象應用方式,對內存的回收是頗有幫助的。
android adapter中的getview緩存列表,bitmap緩存清理,數據庫的cursor