成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android多線程,讓耗時的操作去后臺運行吧

移動開發(fā) Android
在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個常見的例子就是用戶界面。利用線程,用戶可按下一個按鈕,然后程序會立即作出響應,而不是讓用戶等待程序完成了當前任務以后才開始響應。

在android程序中,會有一些耗時的操作,比如從網(wǎng)上抓取圖片,下載文件,批量更新數(shù)據(jù)庫等,這些操作對于手機而言會需要很長的時間,而應用程序界面又不能等到這些操作完成后再顯示,所以要讓界面各這些耗時的操作并行處理,用多線程可以解決這個問題。當然還有其它解決方案,比如用Service.

我們先作一個例子吧,大概是這樣的:有一個列表,每行顯示的一個圖片,圖片是存放在網(wǎng)上的。如果不用多線程,也是可以的,但是要等到所有圖片下載完了才能展示出來。這種方式對用戶體驗很不友好,所以我們采用多線程的方式,對每一個圖片開啟一個線程,當其下載完數(shù)據(jù)后,在主線程中顯示出來。

主Activity

  1. public class TestListActivity extends ListActivity { 
  2. private ImageListAdapter imageListAdapter = null
  3. /** Called when the activity is first created. */ 
  4. @Override 
  5. public void onCreate(Bundle savedInstanceState) { 
  6. super.onCreate(savedInstanceState); 
  7. setContentView(R.layout.imagelist); 
  8. String[] images = {"http://image.baidu.com/image1.jpg","http://image.baidu.com/image2.jpg"}; 
  9. imageListAdapter = new ImageListAdapter(getApplicationContext(), images); 
  10. setListAdapter(imageListAdapter); 

適配器

 

  1. import java.util.ArrayList; 
  2. import java.util.List; 
  3. import android.content.Context; 
  4. import android.graphics.Bitmap; 
  5. import android.os.Handler; 
  6. import android.os.Message; 
  7. import android.view.View; 
  8. import android.view.ViewGroup; 
  9. import android.widget.BaseAdapter; 
  10. import android.widget.ImageView; 
  11. import android.widget.TextView; 
  12.  
  13. public class ImageListAdapter extends BaseAdapter { 
  14. private Context context; 
  15. private String[] myImages = null
  16. public ImageListAdapter(Context context, String[] myImages){ 
  17. this.context = context; 
  18. this.myImages = myImages; 
  19. @Override 
  20. public int getCount() { 
  21. if(myImages == null){ 
  22. return 0
  23. return myImages.length; 
  24. @Override 
  25. public String getItem(int position) { 
  26. if(position < 0 || myImages == null || position>myImages.length){ 
  27. return null
  28. return myImages[position]; 
  29. @Override 
  30. public long getItemId(int position) { 
  31. return position; 
  32. @Override 
  33. public View getView(int position, View convertView, ViewGroup parent) { 
  34. View item = null
  35. if(convertView != null){ 
  36. item = convertView; 
  37. else { 
  38. item = View.inflate(context, R.layout.image_item, null); 
  39. final ImageView imageView = (ImageView)item.findViewById(R.id.image); 
  40. final String image = getItem(position); 
  41. if(image == null){ 
  42. return item; 
  43. //對每個圖片地址創(chuàng)建一個線程, 
  44. new Thread(){ 
  45. public void run(){ 
  46. Message msg = new Message(); 
  47. msg.what = 0
  48. //獲得圖片的Bitmap對象。getBitmap省略了,就是從網(wǎng)上通過http下載圖片然后轉(zhuǎn)化成一個Bitmap 
  49. Bitmap bitmap = getBitmap(image); 
  50. List list = new ArrayList();//將bitmap和imageView包裝成一個List傳到線程外 
  51. list.add(bitmap); 
  52. list.add(imageView); 
  53. msg.obj = list; 
  54. handler.sendMessage(msg); 
  55. }.start(); 
  56. return item; 
  57. private Handler handler = new Handler() { 
  58. @Override 
  59. public void handleMessage(Message msg) { 
  60. switch (msg.what) { 
  61. case 0://接到從線程內(nèi)傳來的圖片bitmap和imageView. 
  62. //這里只是將bitmap傳到imageView中就行了。只所以不在線程中做是考慮到線程的安全性。 
  63. List list = (List)msg.obj; 
  64. Bitmap bitmap = (Bitmap)list.get(0); 
  65. ImageView iv = (ImageView)list.get(1); 
  66. iv.setImageBitmap(bitmap); 
  67. break
  68. default
  69. super.handleMessage(msg); 
  70. }; 
  71. }

布局xml
imagelist.xml

  1. android:orientation="vertical" 
  2. android:layout_width="fill_parent" 
  3. android:layout_height="fill_parent" 
  4. android:padding = "10px" 
  5. android:gravity="center_horizontal" 
  6. android:background="#ffffff"
  7. android:layout_width="fill_parent" 
  8. android:layout_height="fill_parent" /> 
  9. android:layout_width="wrap_content" 
  10. android:layout_height="wrap_content" /> 
  11. image_item.xml 
  12. android:layout_width="fill_parent" 
  13. android:layout_height="wrap_content"
  14. android:id="@+id/image" 
  15. android:layout_width="70px" 
  16. android:layout_height="50px" 
  17. android:paddingRight="5px"/> 

 

轉(zhuǎn)載請標明出處:3G Study :http://blog.3gstdy.com/archives/27

責任編輯:閆佳明 來源: oschina
相關推薦

2011-07-01 11:18:50

Qt 多線程

2017-03-17 16:10:24

linux進程后臺

2015-08-07 10:40:31

UI主線程

2022-12-15 19:27:33

多線程代碼性能

2015-02-03 15:06:23

android多線程下載

2017-03-15 19:54:05

Linux進程后臺

2014-07-31 10:57:15

Android組件Service

2014-07-28 14:46:40

Service

2009-12-29 11:21:55

ADO多線程

2022-08-21 17:35:31

原子多線程

2010-03-16 19:29:26

Java多線程操作

2015-07-20 10:24:33

負載虛擬化

2024-12-03 00:44:50

2017-04-17 19:31:03

Android多線程

2015-05-13 14:22:44

RedisNoSQL數(shù)據(jù)庫

2020-10-26 13:12:00

多線程調(diào)度隨機性

2024-01-26 10:56:47

go程序進程

2025-02-10 04:00:00

Linux進程Python

2009-03-12 10:52:43

Java線程多線程

2011-05-31 13:29:40

Android 多線程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩免费在线视频 | 中文字幕av在线播放 | 欧美在线观看一区二区 | 成人免费毛片在线观看 | 久久久蜜臀国产一区二区 | 国产精品免费观看 | 色久伊人 | 精品视频网| 中文字幕视频在线 | 免费色网址 | 成人免费在线小视频 | 国产成人叼嘿视频在线观看 | 99re视频| 精品久草| 一区二区免费在线视频 | 午夜伦4480yy私人影院 | 日韩欧美在线观看视频 | 日本在线一区二区 | 日韩欧美一级精品久久 | 日日干干| 国产综合在线视频 | 一区二区亚洲 | 五月天国产在线 | 欧美福利 | 91国产视频在线观看 | 国产午夜在线 | 国产精品久久久久久久午夜 | 亚洲国产精品91 | 成人中文字幕在线 | 国产成人精品在线 | 精品国产鲁一鲁一区二区张丽 | 色.com| 综合国产| 91免费在线视频 | 成人精品国产免费网站 | 99热国产免费 | 欧美在线观看一区 | 久草视频在线看 | 欧美精品91| 又爽又黄axxx片免费观看 | 久久国产欧美一区二区三区精品 |