異步任務AsyncTask的便利使用

自定義異步任務

自定義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);

            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章