編輯:初級開發
1. 將涉及android平台UI線程的更新原理 Handler、Runnable
2. 對於Content數據存儲對象可以使用Observer觀察者類來獲取SQLite數據庫的變化
3. 由於本次沒有改變控件的外觀顯示特性,所以沒有重寫TextView的onDraw方法,當然TextView也是從VIEw中繼承的所以可以直接調用基類的onDraw方法。Android開發網提示目前所有Android控件包android.widget.XXX都是從android.view.VIEw類繼承的。
public class DigitalClock extends TextVIEw {
Calendar mCalendar;
private final static String m12 = "h:mm:ss aa";
private final static String m24 = "k:mm:ss";
private FormatChangeObserver mFormatChangeObserver;
private Runnable mTicker;
private Handler mHandler;
private boolean mTickerStopped = false;
String mFormat;
public DigitalClock(Context context) {
super(context);
initClock(context); //資源初始化,本次為了清晰直接放到獨立的initClock方法中實現。
}
public DigitalClock(Context context, AttributeSet attrs) {
super(context, attrs);
initClock(context); //同上
}
private void initClock(Context context) {
Resources r = mContext.getResources();
if (mCalendar == null) {
mCalendar = Calendar.getInstance();
}
mFormatChangeObserver = new FormatChangeObserver(); //構造一個Observer
getContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mFormatChangeObserver); //注冊該對象,用於檢查小時制
setFormat();
}
@Override
protected void onAttachedToWindow() {
mTickerStopped = false;
super.onAttachedToWindow();
mHandler = new Handler();
mTicker = new Runnable() { //開一個線程獲取系統時間變化,這點和上次接收action而言性能更高,可以獲取到毫秒的精度
public void run() {
if (mTickerStopped) return;
mCalendar.setTimeInMillis(System.currentTimeMillis());
setText(DateFormat.format(mFormat, mCalendar));
invalidate();
long now = SystemClock.uptimeMillis();
long next = now + (1000 - now % 1000);
mHandler.postAtTime(mTicker, next);
}
};
mTicker.run();
}
@Override
protected void onDetachedFromWindow() { //android開發網上次的AnalogClock中已經詳細講述,這裡CWJ不再贅述
super.onDetachedFromWindow();
mTickerStopped = true;
}
private boolean get24HourMode() {
return android.text.format.DateFormat.is24HourFormat(getContext());
}
private void setFormat() { //設置小時制
if (get24HourMode()) {
mFormat = m24;
} else {
mFormat = m12;
}
}
private class FormatChangeObserver extends ContentObserver { //android123提示大家應該多了解下ContentObserver,用處很大
public FormatChangeObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
setFormat();
}
}
}
通過本次DigitalClock類的了解,可以看到android平台的控件重繪以及消息處理很簡單吧,其實本節的涉及到的Observer類可以做很多底層的事情,由於可以捕獲SQLite數據庫的變化,聰明的你可以想象到設計哪些安全產品了吧。
大家用eclipse調試android程序的時候可能遇到過不能顯示中文的問題,但有的時候顯示中文是非常必要的,尤其是對網絡數據進行解析的時候。這裡我給大家介紹一個簡單方
Notification通知界面可以用自己定義的界面來顯示。下面是我實現的帶進度條的通知效果下面是主要實現部分代碼,比較簡單直接看代碼可以了。Java代碼nf =new
在本章我們會接觸到這兩個單詞:Zygote [生物] 受精卵, 接合子, 接合體Spawn:產卵通過這兩個單詞,我們就可以大體知道Zygote是干什麼的了,就是叫老母雞
目前,android支持處理器情況:ARM+android 最早支持,支持的最完善,主要用在手機市場,目前積極進軍上網本、智能家居等市場;X86+Android 目前已