解析Android中線程的好處

來源:互聯網
上載者:User

一、Android有兩種方式處理線程:

比較耗時的操作放在後台服務,通過通知機制通知使用者使用的活動activity);在後台線程中處理耗時的操作

二、使用Handler

建立後台線程最友好的辦法是建立一個Handler子類的執行個體。只需一個Handler對應一個Activity。自訂的後台線程可與Handler通訊,Handler將與UI線程一起工作。和Handler通訊,需要兩個選項,message和runnable對象。

三、Message 

發送Message到Handler,第一步調用obtainMessage(),從池中得到Message對象。

然後,可通過訊息佇列將Message發送給Handler,通過sendMessage…()方法族:

sendMessage() 立即發送Message到訊息佇列

sendMessageAtFrontOfQueue() 立即發送Message到隊列,而且是放在隊列的最前面

sendMessageAtTime() 設定時間,發送Message到隊列

sendMessageDelayed() 在延時若干毫秒後,發送Message到隊列

為了處理Message,Handler需要實現handleMessage(),當Message出現在隊列中時,會調用handleMessage()方法。另外,Handler可在需要時更新UI。

以下樣本示範一個進度條,每隔1秒鐘增加1/20個單位。:

 

java代碼:

 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3. android:orientation="vertical"   
  4. android:layout_width="fill_parent" 
  5. android:layout_height="fill_parent"> 
  6. <ProgressBar   
  7. android:id="@+id/progress" 
  8. style="?android:attr/progressBarStyleHorizontal"   
  9. android:layout_width="fill_parent" 
  10. android:layout_height="wrap_content" /> 
  11. </LinearLayout> 

java代碼:

 
  1. package eoe.demo;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.os.Handler;  
  5. import android.os.Message;  
  6. import android.widget.ProgressBar;  
  7. public class ShowThread extends Activity {  
  8. ProgressBar bar;  
  9. Handler handler = new Handler() {  
  10. @Override  
  11. public void handleMessage(Message msg) {  
  12. bar.incrementProgressBy(5);  
  13. }  
  14. };  
  15. boolean isRunning = false;  
  16. /** Called when the activity is first created. */  
  17. @Override  
  18. public void onCreate(Bundle savedInstanceState) {  
  19. super.onCreate(savedInstanceState);  
  20. setContentView(R.layout.main);  
  21. bar = (ProgressBar) findViewById(R.id.progress);  
  22. }  
  23. @Override  
  24. protected void onStart() {  
  25. super.onStart();  
  26. bar.setProgress(0);  
  27. Thread background = new Thread(new Runnable() {  
  28. @Override  
  29. public void run() {  
  30. for (int i = 0; i < 20 && isRunning; i++) {  
  31. try {  
  32. Thread.sleep(1000);  
  33. } catch (InterruptedException e) {  
  34. }  
  35. handler.sendMessage(handler.obtainMessage());  
  36. }  
  37. }  
  38. });  
  39. isRunning = true;  
  40. background.start();  
  41. }  
  42. @Override  
  43. protected void onStop() {  
  44. super.onStop();  
  45. isRunning = false;  
  46. }  

小結:

當第一次啟動一個android程式是,android會自動建立一個稱為“main”主線程的線程。這個線程很重要,因為它負責吧時間指派到相應對控制項,其中就包括螢幕繪圖時間,它同樣是使用者與android控制項互動的線程。

Android 計時器Timer用法

Android智能手機作業系統

常用的Android指令和模擬器參數

用C#實現HTTP協議下的多線程檔案傳輸

SQL點滴之收集SQL Server線程等待資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.