当前位置:操作系统 > 安卓/Android >>

Android 开发中用到的几个多线程解析

在开发工程中线程可以帮助我们提高运行速度,Android开发中我知道的线程有四个一个是老生长谈的Thread,第二个是asyncTask,第三个:TimetTask,第四个是Looper,四个多线程各有个的有点,Thread的运行速度是最快的,AsyncTask的规范性是最棒的,其它两个也有自己的优点,下面先贴上三个列子

1.Thread与Handler组合,比较常见

Handler主要是帮助我们来时时更新UI线程

这里在后天加载100张图片,然后没加载完成一个用handler 返回给UI线程一张图片并显示

最后加载完成返回一个List给UI线程 ,Handler就是一个后台线程与UI线程中间的桥梁

001
package com.android.wei.thread;
002
 
003
import java.io.InputStream;
004
import java.util.ArrayList;
005
import java.util.List;
006
 
007
import android.app.Activity;
008
import android.content.Context;
009
import android.graphics.Bitmap;
010
import android.graphics.BitmapFactory;
011
import android.os.Bundle;
012
import android.os.Handler;
013
import android.os.Message;
014
import android.view.View;
015
import android.view.View.OnClickListener;
016
import android.widget.Button;
017
import android.widget.ImageView;
018
import android.widget.TextView;
019
 
020
public class Activity01 extends Activity {
021
    /** Called when the activity is first created. */
022
  
023
    /**读取进度**/
024
    public final static int LOAD_PROGRESS =0;
025
    
026
    /**标志读取进度结束**/
027
    public final static int LOAD_COMPLETE = 1;
028
    /**开始加载100张图片按钮**/
029
    Button mButton = null;
030
    
031
    /**显示内容**/
032
    TextView mTextView = null;
033
    
034
    /**加载图片前的时间**/
035
    Long mLoadStart = 0L;
036
    /**加载图片完成的时间**/
037
    Long mLoadEndt = 0L;
038
    
039
    Context mContext = null;
040
    /**图片列表**/
041
    private List<Bitmap> list;
042
    /**图片容器**/
043
    private ImageView mImageView;
044
    //接受传过来得消息
045
    Handler handler = new Handler(){
046
        public void handleMessage(Message msg){
047
            switch(msg.what){
048
            case LOAD_PROGRESS:
049
                Bitmap bitmap = (Bitmap)msg.obj;
050
                mTextView.setText("当前读取到第"+msg.arg1+"张图片");
051
                mImageView.setImageBitmap(bitmap);
052
                break;
053
            case LOAD_COMPLETE:
054
                list = (List<Bitmap>) msg.obj;
055
                mTextView.setText("读取结束一共加载"+list.size()+"图片");
056
                break;
057
            }
058
            super.handleMessage(msg);
059
        }
060
    };
061
    public void onCreate(Bundle savedInstanceState) {
062
        super.onCreate(savedInstanceState);
063
        mContext = this;
064
        setContentView(R.layout.main);
065
        mButton =(Button) findViewById(R.id.button1);
066
        mTextView=(TextView) findViewById(R.id.textView1);
067
        mImageView =(ImageView) this.findViewById(R.id.imageview);
068
        mTextView.setText("点击按钮加载图片");
069
        mButton.setOnClickListener(new OnClickListener(){
070
            public void onClick(View v){
071
                //调用方法
072
                LoadImage();
073
            }
074
        });
075
            
076
        
077
    }
078
    public void LoadImage(){
079
        new Thread(){
080
            public void run(){
081
                mLoadStart = System.currentTimeMillis();
082
                List<Bitmap> list = new ArrayList<Bitmap>();
083
                for(int i =0;i<100;i++){
084
                    Bitmap bitmap=ReadBitmap(mContext,R.drawable.icon);
085
                    Message msg = new Message();
086
                    msg.what = LOAD_PROGRESS;
087
                    msg.arg1 = i+1;
088
                    list.add(bitmap);
089
                    msg.obj = bitmap;
090
                    handler.sendMessage(msg);
091
             

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,