什麼是handler,已經有很多人介紹過了,在這裡重點記下最近對handler的理解。
handler如果不與looper一起呼叫,那麼它與activity其實是乙個執行緒,在這裡先貼下**
package lxf.handlertest;
import android.os.bundle;
import android.os.handler;
import android.os.looper;
import android.os.message;
import android.view.menu;
import android.view.menuitem;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.textview;
public class mainactivity extends actionbaractivity
runnable r = new runnable() catch (interruptedexception e)
} };
private class btnlistener implements onclicklistener
} private class testthread implements runnable
};while (i < 10)
looper.loop();
} }private void initralweight()
@override
public boolean oncreateoptionsmenu(menu menu)
@override
public boolean onoptionsitemselected(menuitem item)
return super.onoptionsitemselected(item);
}}
為了驗證同一執行緒,需先注釋initralweight();然後執行,可發現:
接下來嘗試理解handler與looper的關係,這裡候就不能注釋initralweight();通過除錯發現,
handler.sendmessage(msg)後,handler並沒有立即取出資訊,而是等到looper.loop()後,才從訊息佇列裡取出。
其實handler要實現非同步,只需要呼叫thread.start()方法就行,如果不呼叫這個的話,那就是偽非同步。
Handler與非同步訊息的原始碼解析
looper 的prepare 方法 如下 private static void prepare boolean quitallowed sthreadlocal.set new looper quitallowed 這個方法裡面最重要的無疑就是 sthreadlocal 物件的 get 和 se...
AsyncTask和Handler非同步實現比較
一 asynctask asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程。優點 簡單 快捷 過程可控。缺點 在使用多個非同步操作和並需要進行...
Android非同步訊息處理Handler的使用
眾所周知,android的ui執行緒是不安全的,其它執行緒不可以直接操作ui。那麼就產生了乙個問題 android非同步訊息處理 如何在其它執行緒進行ui更新操作。由於ui都是由主線程繪製的,在進行耗時操作的時候會導致主線程繁忙,最後導致ui介面卡頓或無反應,所以在進行耗時操作的時候我們應該新建一條...