异步任务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
- 异步任务AsyncTask的便利使用
- 异步任务AsyncTask的使用
- AsyncTask异步任务的使用
- 异步任务AsyncTask使用
- 异步任务AsyncTask使用
- Android异步任务之AsyncTask的使用
- Android 异步任务 AsyncTask 的使用总结
- Android 异步任务AsyncTask的使用
- 异步任务AsyncTask的使用参考
- 异步任务——AsyncTask的使用
- AsyncTask异步任务类的使用
- Android中异步任务AsyncTask的使用
- Android AsyncTask异步任务的使用
- Android 异步任务AsyncTask的使用
- AsyncTask异步任务使用解析
- 使用AsyncTask运行异步任务
- 使用AsyncTask运行异步任务
- AsyncTask异步任务使用详解
- Vericut02_基本仿真操作
- SAP系统直接查询物流、快递跟踪信息
- NYOJ 题目57:6174问题
- JQuery操作html中select标签
- Pig 0.14.0安装
- 异步任务AsyncTask的便利使用
- itop exynos4412 lcd驱动 详细分析 (二)
- Clash of Clans, Hay day, Boom Beach等游戏资源包破解
- HDU 2925 Musical Chairs(约瑟夫环)
- 学习
- SAP ECC 主数据自动切换、刷新方案
- listview中adapter的notifyDataSetChanged()不生效的问题
- Android Studio几个常用的设置
- 排列算法