編輯:Android編程入門
andriod提供了Handler來滿足線程間的通信,上次在更新UI的時候也提到過Handler的使用,關於Handler的基本使用,參見博客(android基礎---->子線程更新UI).今天我們深入Handler的源碼,了解一個Handler的內部執行原理。
目錄導航
一、 創建一個Handler,處理消息:
public static final int UPDATE_TEXT = 1;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
textView.setText("I Love you.");
break;
default:
break;
}
}
}
二、 發送消息:
// 用handler處理上述問題
public void handlerUpdate(View view) {
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message); // 將Message對象發送出去
}
}).start();
}
三、 首先我們要創建一個handler,具體構造方法代碼如下,這裡由於是new Handler():callback=null,async=false
public Handler(Callback callback, boolean async) {
if (FIND_POTENTIAL_LEAKS) {
final Class<? extends Handler> klass = getClass();
if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
(klass.getModifiers() & Modifier.STATIC) == 0) {
Log.w(TAG, "The following Handler class should be static or leaks might occur: " +
klass.getCanonicalName());
}
}
mLooper = Looper.myLooper();
if (mLooper == null) {
throw new RuntimeException(
"Can't create handler inside thread that has not called Looper.prepare()");
}
mQueue = mLooper.mQueue;
mCallback = callback;
mAsynchronous = async;
}
四、 接下來進行了我們消息的發送:handler.sendMessage(message),源代碼如下:(中間我們省略了一些過程)
public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
MessageQueue queue = mQueue;
if (queue == null) {
RuntimeException e = new RuntimeException(
this + " sendMessageAtTime() called with no mQueue");
Log.w("Looper", e.getMessage(), e);
return false;
}
return enqueueMessage(queue, msg, uptimeMillis);
}
enqueueMessage(queue, msg, uptimeMillis)的代碼如下:
private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
msg.target = this;
if (mAsynchronous) {
msg.setAsynchronous(true);
}
return queue.enqueueMessage(msg, uptimeMillis);
}
五、 在上述Handler的預備分析當中,我們提到過Looper的loop方法,它負責從隊列中取出消息,並且分發消息。而且我們在Handler的dispatchMessage方法也了解到,分發的消息會由Handler的handleMessage方法處理:也就是我們創建的Handler的重寫方法:
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
textView.setText("I Love you.");
break;
default:
break;
}
}
Android 內容提供者(Content Provider)
Android - 內容提供者(Content Provider)內容提供者組件通過請求從一個應用程序向其他的應用程序提供數據。這些請求由類 Conten
android基礎---->NDK的使用
NDK的發布,使“Java+C”的開發方式終於轉正,成為官方支持的開發方式。NDK將是Android平台支持C開發的開端,今天我們開始ndk的學習
Android—自定義控件實現ListView下拉刷新
這篇博客為大家介紹一個android常見的功能——ListView下拉刷新(參考自他人博客,網址忘記了,閱讀他的代碼自己理解注釋的,希望能幫助到大
Android開發學習之路-Android Studio真神器!
放假之後電腦配置升級就開始用Android Studio(下面簡稱AS)了,那個酸爽真的不是一般的啊,這裡開一篇博客來記錄下AS裡面各種酷炫的功能,有更好玩的,大家不要吝