編輯:關於Android編程
Android只允許UI線程修改Activity裡的UI組件。當Android程序第一次啟動時,Android會同時啟動一條主線程(Main Thread),主線程主要負責處理與UI相關的事件,如用戶的按鍵事件、屏幕繪圖事件,並把相關的事件分發到對應的組件進行處理。所以,主線程通常又被稱為UI線程。
Android只允許UI線程修改Activity裡的UI組件,這樣會導致新啟動的線程無法動態改變界面組件的屬性值。但在實際的Android程序開發中,尤其是涉及動畫的游戲開發中,需要讓新啟動的線程周期性的改變界面組件的屬性值,這就需要借助於Handler的消息傳遞機制來實現了。
1 Handler類簡介
Handler類的主要作用有兩個:
(1)在新啟動的線程中發送消息
sendMessage(Message msg) 或者
sendEmptyMessage(int what)
兩者的差異,請看Android源碼:
public final boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
public final boolean sendEmptyMessage(int what)
{
return sendEmptyMessageDelayed(what, 0);
}
再看sendEmptyMessageDelayed(what, 0)的源碼:
public final boolean sendEmptyMessageDelayed(int what, long delayMillis)
{
Message msg = Message.obtain();
msg.what = what;
return sendMessageDelayed(msg, delayMillis);
}
其實,sendMessage(Message msg) 和sendEmptyMessage(int what) 實際上是一樣的,一個傳Message類型的msg,一個傳int類型的what,傳what的,最終會轉為msg。
(2)在主線程中獲取、處理消息
public void handleMessage(Message msg)
2 使用實例
下面使用Handler以及Timer類實現時間的自動刷新
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView txt=(TextView)findViewById(R.id.showTime);
final Handler myHandler=new Handler()
{
@Override
public void handleMessage(Message msg)
{
if(msg.what==0x12)
{
txt.setText("當前時間:"+new java.util.Date());
}
}
};
Button btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
myHandler.sendEmptyMessage(0x12);
}
}, 0,1000);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android多媒體播放之音樂播放狀態和步驟
多媒體播放的狀態圖: public class MainActivity extends Activity implements OnClickListener {
Android循環滾動廣告條的完美實現,封裝方便,平滑過渡,從網絡加載圖片,點擊廣告進入對應網址
今天給大家帶來一點干貨,就是橫向循環滾動的廣告條。有點類似淘寶的banner廣告位,可以手勢滑動,也會依據固定時間間隔自動滾動,滑到盡頭時會一直循環。過渡非常
calabash-android 命令行使用
本文介紹calabash-android的命令行的使用,通過例子,熟悉calabash-android所調用的ruby api和常用控制台命令, 如query, touc
Android開發中MotionEvent坐標獲取方法分析
本文實例講述了Android開發中MotionEvent坐標獲取方法。分享給大家供大家參考,具體如下:Android MotionEvent中getX()與getRawX