加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Android异步处理四:AsyncTask的达成原理

发布时间:2021-12-22 12:47:12 所属栏目:PHP教程 来源:互联网
导读:AsyncTask.java package com.zhuozhuo; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Act

AsyncTask.java
 
package com.zhuozhuo;  
  
  
import org.apache.http.HttpResponse;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.DefaultHttpClient;  
  
import android.app.Activity;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.os.AsyncTask;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.ImageView;  
import android.widget.ProgressBar;  
import android.widget.Toast;  
  
public class AsyncTaskActivity extends Activity {  
      
    private ImageView mImageView;  
    private Button mButton;  
    private ProgressBar mProgressBar;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        mImageView= (ImageView) findViewById(R.id.imageView);  
        mButton = (Button) findViewById(R.id.button);  
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);  
        mButton.setOnClickListener(new OnClickListener() {  
              
            @Override  
            public void onClick(View v) {  
                GetCSDNLogoTask task = new GetCSDNLogoTask();  
                task.execute("http://www.linuxidc.com/pic/logo.gif");  
            }  
        });  
    }  
      
    class GetCSDNLogoTask extends AsyncTask<String,Integer,Bitmap> {//继承AsyncTask   
  
        @Override  
        protected Bitmap doInBackground(String... params) {//处理后台执行的任务,在后台线程执行   
            publishProgress(0);//将会调用onProgressUpdate(Integer... progress)方法   
            HttpClient hc = new DefaultHttpClient();  
            publishProgress(30);  
            HttpGet hg = new HttpGet(params[0]);//获取csdn的logo   
            final Bitmap bm;  
            try {  
                HttpResponse hr = hc.execute(hg);  
                bm = BitmapFactory.decodeStream(hr.getEntity().getContent());  
            } catch (Exception e) {  
                  
                return null;  
            }  
            publishProgress(100);  
            //mImageView.setImageBitmap(result); 不能在后台线程操作ui   
            return bm;  
        }  
          
        protected void onProgressUpdate(Integer... progress) {//在调用publishProgress之后被调用,在ui线程执行   
            mProgressBar.setProgress(progress[0]);//更新进度条的进度   
         }  
  
         protected void onPostExecute(Bitmap result) {//后台任务执行完之后被调用,在ui线程执行   
             if(result != null) {  
                 Toast.makeText(AsyncTaskActivity.this, "成功获取图片", Toast.LENGTH_LONG).show();  
                 mImageView.setImageBitmap(result);  
             }else {  
                 Toast.makeText(AsyncTaskActivity.this, "获取图片失败", Toast.LENGTH_LONG).show();  
             }  
         }  
           
         protected void onPreExecute () {//在 doInBackground(Params...)之前被调用,在ui线程执行   
             mImageView.setImageBitmap(null);  
             mProgressBar.setProgress(0);//进度条复位   
         }  
           
         protected void onCancelled () {//在ui线程执行   
             mProgressBar.setProgress(0);//进度条复位   
         }  
          
    }  
      
  
}  
main.xml
 
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical" android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <ProgressBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal"></ProgressBar>  
    <Button android:id="@+id/button" android:text="下载图片" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>  
    <ImageView android:id="@+id/imageView" android:layout_height="wrap_content"  
        android:layout_width="wrap_content" />  
</LinearLayout>  
mainifest.xml
 
<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
      package="com.zhuozhuo"  
      android:versionCode="1"  
      android:versionName="1.0">  
    <uses-sdk android:minSdkVersion="10" />  
<uses-permission android:name="android.permission.INTERNET"></uses-permission>  
    <application android:icon="@drawable/icon" android:label="@string/app_name">  
        <activity android:name=".AsyncTaskActivity"  
                  android:label="@string/app_name">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
  
    </application>  
</manifest>  

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读