Android 延迟加载( AsynTask 异步加载)

原文地址:http://fycoder.com/FYCblog/?p=328

参考:http://blog.csdn.net/cjjky/article/details/6684959

代码如下:

package com.fycoder;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;


public class LiuyActivity  extends Activity{	

    private ProgressDialog progressDialog = null;
    private String showmsg = "ShowMsg" ;
    private Button	b  ;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	  super.onCreate(savedInstanceState);
          setContentView(R.layout.main2);          
          //progressDialog = new ProgressDialog(this);
          //progressDialog.setTitle("请稍等");
          //progressDialog.setMessage("正在加载...");         
          b =(Button)findViewById(R.id.button315);    			
          progressDialog = ProgressDialog.show(LiuyActivity.this, "请稍等...", "获取数据中...", true);
          new LiuyAsynTask().execute("第一个参数");
    }  
        
    /**
     * @author liuy
     * 
     * 参数:
     *	第一个为doInBackground接受的参数,
     *	第二个为显示进度的参数,
     *	第三个为doInBackground返回和onPostExecute传入的参数
     * */
    private class LiuyAsynTask extends AsyncTask<String, Void, String[]> {
        /**
         * onPreExecute():
         * 	 	该方法将在执行实际的后台操作前被UI 线程调用。
         * 		可以在该方法中做一些准备工作,如在界面上显示
         * 		一个进度条,或者一些控件的实例化,这个方法可
         * 		以不用实现。
         * */
        @Override
        protected void onPreExecute () {
            super.onPreExecute();
            progressDialog.show(); //显示等待状态条
        }
        
        /**
         * doInBackground(Params...):
         * 		将在 onPreExecute 方法执行后马上执行,该方法运行在后台线程中。
         * 		这裏将主要负责执行那些很耗时的后台处理工作。可以调用
         * 			publishProgress
         * 		方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。 
         * */
        @Override
        protected String[] doInBackground (String... params) {
        	String[] result = new String[2];
        	result[0]="ret1";
        	result[1]="ret2";
        	Log.w(showmsg, "doInBackground()显示传进的参数 params[0]:"+params[0]);
        	
        	//---- 耗时,等待一些时间 -----
            for (int i=0 ;i<999000000;i++){
            	int  a = 1+1+1*8*8*8*8*8*9 ;
            }
        	//---------
            
            // b.setText("^_^");	//在此处修改 Activity上的UI内容会报错,
            						//只可在onPostExecute里修改才行
            return result;
        }

        /**
         *  onPostExecute(Result):
         *  	在doInBackground 执行完成后,onPostExecute方法将被UI
         *  	线程调用,后台的计算结果将通过该方法传递到UI线程,并且在界
         *  	面上展示给用户.
         * */
        @Override
        protected void onPostExecute (String[] result) {
            super.onPostExecute(result);
            
            Log.w(showmsg, "onPostExecute()显示传进的参数 result[0]:"+result[0]);
            Log.w(showmsg, "onPostExecute()显示传进的参数 result[1]:"+result[1]);            
            progressDialog.dismiss(); //关闭等待进度条
            //在按钮上设置需要修改的内容
            //	注:	Activity 上的 UI的一些修改,在onPostExecute 才能
            //		正确执行,若在doInBackground里修改 Activity UI内容会报错。
            b.setText("^_^");
        }
        
        /**
         * onCancelled()
         * 		在用户取消线程操作的时候调用。在主线程中调用
         * 		onCancelled()的时候调用
         * */

    }

}

/**
 * 可参考:
 * http://blog.csdn.net/cjjky/article/details/6684959  Android中AsyncTask的简单用法
 * 
 * */


main2.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"
    android:gravity="center"
    >
    <Button
    android:id="@+id/button315"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="old msg"
    />
    
</LinearLayout>

LogCat显示:

14:28:32: W/ShowMsg: doInBackground()显示传进的参数 params[0]:第一个参数
14:28:40: W/ShowMsg: onPostExecute()显示传进的参数 result[0]:ret1
14:28:40: W/ShowMsg: onPostExecute()显示传进的参数 result[1]:ret2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值