异步任务AsyncTask的便利使用

来源:互联网 发布:淘宝关键词搜索人数 编辑:程序博客网 时间:2024/04/25 18:49

自定义异步任务

自定义ThreadHelper类,利用AsyncTask,使用时通过回调进行异步操作。

ThreadHelper工具类

import java.io.Serializable;import android.os.AsyncTask;public class ThreadHelper {    private static ThreadHelper util;    public static ThreadHelper getInstance() {        if (util == null) {            util = new ThreadHelper();        }        return util;    }    private ThreadHelper() {        super();    }    public void runAsync(ThreadCallBack tcb) {        new ThreadAsync().execute(tcb);    }    public class ThreadAsync extends AsyncTask<Object, Integer, Object> {        ThreadCallBack tcb;        @Override        protected Object doInBackground(Object... tc) {            if (tc != null && tc.length > 0) {                tcb = (ThreadCallBack) tc[0];                return tcb.run(this);            }            return null;        }        @Override        protected void onPostExecute(Object result) {            super.onPostExecute(result);            if (tcb != null) {                tcb.result((Serializable) result);            }        }        public void progress(Integer... values) {            publishProgress(values);        }        @Override        public void onProgressUpdate(Integer... values) {            // TODO Auto-generated method stub            super.onProgressUpdate(values);            if (tcb != null) {                tcb.progress(values);            }        }    }    public interface ThreadCallBack {        void progress(Integer... values);        Object run(ThreadAsync at);        void result(Object result);    } public  boolean isServiceRunning(Context context,Class cl) {            boolean isRunning = false;            ActivityManager activityManager =                    (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);            List<ActivityManager.RunningServiceInfo> serviceList                    = activityManager.getRunningServices(Integer.MAX_VALUE);            if (serviceList == null || serviceList.size() == 0) {                return false;            }            for (int i = 0; i < serviceList.size(); i++) {                if (serviceList.get(i).service.getClassName().equals(cl.getName())) {                    isRunning = true;                    break;                }            }            return isRunning;        }     public boolean isRunBackground(Context context) {            ActivityManager activityManager = (ActivityManager) context                    .getSystemService(Context.ACTIVITY_SERVICE);            List<RunningAppProcessInfo> appProcesses = activityManager                    .getRunningAppProcesses();            for (RunningAppProcessInfo appProcess : appProcesses) {                if (appProcess.processName.equals(context.getPackageName())) {                    if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {                        return true;                    } else {                        return false;                    }                }            }            return false;        }}

使用方法

ThreadHelper.getInstance().runAsync(new ThreadCallBack() {            /*              * 后台操作             */            @Override            public Object run(ThreadAsync at) {//              这句会跳转到progress(Integer... values)中                at.progress(6);                try {                    URL url = new URL("http://www.baidu.com");                    HttpURLConnection hc = (HttpURLConnection) url                            .openConnection();                    at.progress(10);                    hc.setConnectTimeout(45000);                    hc.setInstanceFollowRedirects(false);                    hc.setDoInput(true);                    InputStream stream = hc.getInputStream();                    StringBuffer sb = new StringBuffer();                    at.progress(20);                    try {                        BufferedReader br = new BufferedReader(                                new InputStreamReader(stream, "GBK"));                        String temp = "";                        while ((temp = br.readLine()) != null) {                            sb.append(temp);                        }                        at.progress(40);                    } catch (Exception e) {                        e.printStackTrace();                    }                    return sb.toString();                } catch (MalformedURLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                return null;            }            /*              * 操作结果,在主线程中处理             */            @Override            public void result(Object result) {                if (result != null) {                    System.out.println(result.toString());                }            }            /*              * 在后台任务中传过来的进度             */            @Override            public void progress(Integer... values) {                Toast.makeText(getApplicationContext(), "当前进度" + values[0],                        Toast.LENGTH_SHORT).show();                setProgress(values[0] * 100);            }        });
0 0
原创粉丝点击