加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AsyncTask的使用

发布时间:2020-12-16 09:07:07 所属栏目:百科 来源:网络整理
导读:class MyAsnycTask extends AsyncTaskString,Integer,Object {@Overrideprotected void onPreExecute() {super.onPreExecute();dialog = new ProgressDialog(MainActivity.this);dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.setMax(10
class MyAsnycTask extends AsyncTask<String,Integer,Object> {

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			dialog = new ProgressDialog(MainActivity.this);
			dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
			dialog.setMax(100);
			dialog.setTitle("提示");
			dialog.setMessage("当前正在玩命加载中,请稍后 ... ");
			dialog.setIcon(android.R.drawable.ic_menu_info_details);
			dialog.setCancelable(false);
			dialog.show();
		}
		
		@Override
		protected Object doInBackground(String... params) {
			String str = params[0];
	
			for (int i = 0; i < 10;  i ++) {
				SystemClock.sleep(1000);
				publishProgress((i + 1) * 10);
				MyLog.d(TAG,"sleep 了 " + i + " 秒");
			}
			return str + "_玩命加载成功";
		}
		@Override
		protected void onPostExecute(Object result) {
			super.onPostExecute(result);
			Toast.makeText(getApplicationContext(),(String) result,1).show();
			dialog.cancel();
			dialog.dismiss();
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
			int position = values[0];
			dialog.setProgress(position);
		}
		
		
		
	}

调用

String url = "http://192.168.1.100:8080/myserver.do";
new MyAsnycTask().execute(url);

说明 模拟数据
package com.itheima24.know.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.content.Context;
import android.os.AsyncTask;

import com.itheima24.know.R;
import com.itheima24.know.domain.Answer;
import com.itheima24.know.ui.UpdateView;

public class MyAsyncTask {
	private Context context;
	private UpdateView updateView;
	
	public MyAsyncTask(Context context,UpdateView updateView){
		this.context = context;
		this.updateView = updateView;
	}
	/**
	 * 模拟在服务端请求数据
	 * @param text
	 */
	public void queryAnswer(String text){
		new QueryAnswerAsyncTask().execute(text);
	}
	/**
	 *AsyncTask异步处理耗时任务 效率更高 因为有一个线程池 所以工作效率高  有可能对资源的消耗比较大
	 * AsyncTask<Params,Progress,Result>
	 * Params:入口参数,比如去server端的地址,如果是String类型的url地址,那么params参数就写为String
	 * Progress:更新进度条的时候进度单位类型,一般更新进度条是int单位,Integer
	 * Result:最终拿到结果的数据类型  假如说 从服务端接收到的数据 封装到了Person对象
	 * 那么Result写成Person
	 */
	private class QueryAnswerAsyncTask extends AsyncTask<String,Void,Answer>{
		/**
		 * 主线程运行
		 * 该方法运行在主线程,一般用来给用户一个对话框提示
		 */
		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
		}
		/**
		 * 主线程运行
		 * 获取结果 该方法运行在主线程,可以用来取消在onPreExecute方法中显示的对话框
		 * 一般在这个方法中更新UI
		 * 注意:Result参数与doInBackground的返回值类型和onPostExecute
		 * 的参数类型必须保持一致
		 */
		@Override
		protected void onPostExecute(Answer result) {
			super.onPostExecute(result);
			Random random = new Random();
			try {
				Thread.sleep(random.nextInt(4));
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			if(result!=null){
				int type = result.getAnswerType();
				if(type == Answer.JOKE_ANSWER){
					updateView.updateSheView(result.getJokeAnswer());
				}else if (type == Answer.MM_ANSWER) {
					String[] mmArr = context.getResources().getStringArray(R.array.mm);
					Random r = new Random();
					int index = r.nextInt(mmArr.length);
					updateView.updateMMView(mmArr[index],result.getMmAnswer());
				} 
			}
		}
		/**
		 * 子线程中运行
		 * 该方法运行在子线程
		 * 用来进行耗时的处理,一般用来请求server,或者需要
		 * 长时间处理的任务
		 */
		@Override
		protected Answer doInBackground(String... params) {
			String str = params[0];
			Answer answer = getAnswer(str);
			return answer;
		}
	}
	
	private Answer getAnswer(String str) {
		if(str.contains("笑话")){
			String[] jokeArray = context.getResources().getStringArray(R.array.joke);
			Random random = new Random();
			int index = random.nextInt(jokeArray.length);
			
			Answer answer = new Answer();
			String joke = jokeArray[index];
			answer.setAnswerType(Answer.JOKE_ANSWER);
			answer.setJokeAnswer(joke);
			return answer;
		}else if(str.contains("美女") || str.contains("妹子")){
			int resId = randomMM();
			Answer answer = new Answer();
			answer.setAnswerType(Answer.MM_ANSWER);
			answer.setMmAnswer(resId);
			return answer;
		}
		return null;
	}
	/**
	 * 随机获取一个美女
	 * @return
	 */
	private int randomMM() {
		List<Integer> mmList = new ArrayList<Integer>();
		mmList.add(R.drawable.mm0);
		mmList.add(R.drawable.mm1);
		mmList.add(R.drawable.mm2);
		mmList.add(R.drawable.mm3);
		mmList.add(R.drawable.mm4);
		mmList.add(R.drawable.mm5);
		mmList.add(R.drawable.mm6);
		mmList.add(R.drawable.mm7);
		mmList.add(R.drawable.mm8);
		mmList.add(R.drawable.mm9);
		mmList.add(R.drawable.mm10);
		mmList.add(R.drawable.mm11);
		mmList.add(R.drawable.mm12);
		mmList.add(R.drawable.mm13);
		mmList.add(R.drawable.mm14);
		mmList.add(R.drawable.mm15);
		mmList.add(R.drawable.mm16);
		mmList.add(R.drawable.mm17);
		mmList.add(R.drawable.mm18);
		mmList.add(R.drawable.mm19);
		mmList.add(R.drawable.mm20);
		mmList.add(R.drawable.mm21);
		mmList.add(R.drawable.mm22);
		mmList.add(R.drawable.mm23);
		
		Random r = new Random();
		int index = r.nextInt(mmList.size());
		int resId = mmList.get(index);
		return resId;
	}
}

values里面的arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 问候 -->
    <string-array name="hello">
        <item>你好,%1$s!</item>
        <item>%1$s我是你的助手,有什么想问我的吗?</item>
        <item>很高兴为您服务,%1$s!</item>
        <item>%1$s,我想死你了!</item>
    </string-array>
    <string-array name="hello2">
        <item>%1$s!你好,多谢关心!</item>
        <item>你好,%1$s,我是你的助手,有什么想问我的吗?</item>
        <item>我很好,你呢,%1$s!</item>
        <item>%1$s,我很好啊!</item>
    </string-array>
    <!-- 笑话类 -->
    <string-array name="joke">
        <item>家住十楼,这两天电梯坏了维修中。周末懒得下楼,就叫肯德基外卖。结果连续两天来的是同一个大哥。第二天他气喘吁吁地说:“哥,明天别点肯德基了,麦当劳出新品了,你不试试?”</item>
        <item>领导开会,开了很长时间,众人疲惫不堪,突然听到领导说了一句,下面我讲最后一点,众人都精神起来。然后,领导又说了一句,"这一点我分三小点来讲。"众人......晕倒。 </item>
        <item>今儿我请客!大家一定要赏光啊,咱们吃:自来水泡馍,馍自带。</item>
    	<item>睡觉前,我给儿子讲故事说:“有只小鸟很孝敬老人,它妈妈老了后,它就捉小虫子给妈妈吃。要是我老了,你怎么做呢?”儿子认真地说:“我捉大虫子给妈妈吃!”</item>
    	<item>考完试以后,我突然对人生失去了信心。第二天去医院看病,医生说:“对不起,你这个病,当初考试划重点时老师说不是重点,我看不了。”</item>
    	<item>妈妈:“今天在学校里学了不少东西吧!”儿子:“不多,明天还得去。”</item>
    	<item>晚上,妈妈在屋里对在客厅的儿子喊道:“儿子,你去厨房看下,看灯关上了没有。”儿子去看了看,回来说:“妈妈,厨房里黑咕隆咚的,什么也看不到。”</item>
    	<item>爸爸:“我要寄两封信,你去帮我买两个信封、两张邮票。”儿子拿了钱就去了,过会儿回来后,却只拿了一个信封、一张邮票。爸爸问:“你怎么都买了一个呢。”儿子:“你把那两封信都装到一个信封里,只用贴一张邮票,多省钱啊!”</item>
    </string-array>
    
    <string-array name="tang_poetry">
        <item>
            故人西辞黄鹤楼,n烟花三月下扬州。n孤帆远影碧空尽,n惟见长江天际流。
		</item>
        <item>
			床前明月光,n疑是地上霜,n举头望明月,n低头思故乡。
		</item>
		<item>
		    朝辞白帝彩云间,n千里江陵一日还。n两岸猿声啼不住,n轻舟已过万重山。
		</item>
		<item>
		    白日依山尽,n黄河入海流。n欲穷千里目,n更上一层楼。
		</item>
		<item>
		    黄河远上白云间,n一片孤城万仞山。n羌笛何须怨杨柳,n春风不度玉门关。
		</item>
    </string-array>
    
    <string-array name="mm_path">
        <!-- 以下图片地址都是假的 -->
        <item>
            http://image.baidu.com/1231231.jpg//图片地址假
		</item>
        <item>
			http://image.baidu.com/1231231.jpg
		</item>
		<item>
		    http://image.baidu.com/1231231.jpg
		</item>
		<item>
		    http://image.baidu.com/1231231.jpg
		</item>
		<item>
		    http://image.baidu.com/1231231.jpg
		</item>
    </string-array>
    
    <string-array name="mm">
        <item>看这张如何?</item>
        <item>好吧,你看这张怎么样 . . .</item>
        <item>怎么都爱让我找美女?</item>
        <item>行,给你看</item>
        <item>这个怎么样,正不正?</item>
        <item>我觉得这个最好看了</item>
    </string-array>
    <string-array name="unknow">
        <item>干嘛问人家这么难的问题?不会啊!</item>
        <item>这个问题太难了,我不知道该怎么回答!</item>
        <item>你是在考我的智商吗?问这么难的问题。</item>
        <item>不会,不要欺负人。</item>
        <item>哎呀,这个问题好难啊!</item>
        <item>真的好难啊,你真坏。</item>
    </string-array>
    <!-- 
    <string-array name="server_error">
        <item>出错了,服务器故障!</item>
        <item>亲,服务器不给力,什么答案也没告诉我。</item>
        <item>服务器拒绝连接</item>
        <item>服务器出异常了,不过10000知道不会挂掉,再试一次。</item>
    </string-array>
     -->
    <string-array name="net_error">
        <item>出错了,%1$s,网络异常!</item>
        <item>连接超时,%1$s,检查下网络吧,我已经很努力了</item>
        <item>您网络不给力啊,%1$s。</item>
        <item>网络出错了,不过10000知道不会挂掉,再试一次。</item>
    </string-array>
    <string-array name="json_error">
        <item>%1$s,数据异常。</item>
        <item>对不起,%1$s,数据解析异常。</item>
        <item>数据出错了,不过10000知道不会挂掉,再试一次。</item>
    </string-array>
</resources>

(编辑:李大同)

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

    推荐文章
      热点阅读