android教程之使用asynctask在后台运行耗时任务_Android

, Android中实现了默认的进度提示对话框,即ProgressDialog,通过实例化和一些简单设置,就可以使用了。

复制代码 代码如下:

private class DownloadDBTask extends AsyncTask<String, Integer, String> {  
        // 可变长的输入参数,与AsyncTask.exucute()对应  
        ProgressDialog pdialog;  
        public DownloadDBTask(Context context){  
            pdialog = new ProgressDialog(context, 0);     
            pdialog.setButton("取消", new DialogInterface.OnClickListener() {  
             public void onClick(DialogInterface dialog, int i) {  
              dialog.cancel();  
             }  
            });  
            pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {  
             public void onCancel(DialogInterface dialog) {  
              finish();  
             }  
            });
            pdialog.setTitle("第一次使用,正在下载数据...");
            pdialog.setCancelable(true);  
            pdialog.setMax(100);  
            pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
            pdialog.show();  
        }

        @Override 
        protected String doInBackground(String... params) {  
            try{
                    if (DataOper.GetTopNearestPOIs(1, mDBHelper).size()==0)
                            DataOper.GetAllPtsFromNet(mDBHelper, pdialog); // 从网络上下载数据记录的功能
            } catch(Exception e) {  
                    e.printStackTrace();
            }  
            return null;
        }

        @Override 
        protected void onCancelled() {  
            super.onCancelled();  
        }  

        @Override 
        protected void onPostExecute(String result) {  
            pdialog.dismiss();   
        }  

        @Override 
        protected void onPreExecute() {
        }  

        @Override 
        protected void onProgressUpdate(Integer... values) {   
        } 
     }  

对于写好的异步任务类,调用方法为:

复制代码 代码如下:

DownloadDBTask task = new DownloadDBTask(context);  
task.execute("");

注意AsyncTask为泛型类,具有三个泛型参数,此处设计为 <String, Integer, String>,对应于运行参数、进度值类型和返回参数。
从sdk的文档中看到,当一个AsyncTask运行的过程中,经历了4个步骤:

1、onPreExecute(), 在excute调用后立即在ui线程中执行。 This step is normally used to setup the task, for instance by showing a progress bar in the user interface.
2、doInBackground, 当 onPreExecute() 完成后, 立即在后台线程中运行. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate step.
3、onProgressUpdate, 在调用publishProgress后,在ui线程中运行. The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field.
4、onPostExecute, 后台运算完成时在ui线程中调用. The result of the background computation is passed to this step as a parameter.

时间: 2024-10-12 19:01:58

android教程之使用asynctask在后台运行耗时任务_Android的相关文章

android教程之使用asynctask在后台运行耗时任务

, Android中实现了默认的进度提示对话框,即ProgressDialog,通过实例化和一些简单设置,就可以使用了. 复制代码 代码如下:private class DownloadDBTask extends AsyncTask<String, Integer, String> {           // 可变长的输入参数,与AsyncTask.exucute()对应           ProgressDialog pdialog;           public Download

Android实现判断某个服务是否正在运行的方法_Android

本文实例讲述了Android实现判断某个服务是否正在运行的方法.分享给大家供大家参考,具体如下: /** * 判断某个服务是否正在运行的方法 * * @param mContext * @param serviceName * 是包名+服务的类名(例如:net.loonggg.testbackstage.TestService) * @return true代表正在运行,false代表服务没有正在运行 */ public boolean isServiceWork(Context mContex

Android实现TCP断点上传 后台C#服务接收_Android

终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证,一旦断开,无法续传.所以得采用另一种流行的做法,TCP上传大文件.  网上查找了一些资料,大多数是断点下载,然后就是单独的C#端的上传接收,或是HTTP的,或是只有android端的,由于任务紧所以之前找的首选方案当然是Http先来实现文件上传,终端采用Post方法,将文件直接传至后端,后端通过Fi

activity-判断android应用是否在后台运行

问题描述 判断android应用是否在后台运行 在android应用中有一个webView. 下面代码中我用toast显示加载进度: webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view int progress) { super.onProgressChanged(view progress); toast.setText(""Lo

怎么能够让android 应用长时间在后台运行

问题描述 怎么能够让android 应用长时间在后台运行 怎么能让手机app长时间在后台运行,不被系统杀死!!!!!!!!!!!!!! 求助,非常紧急啊! 解决方案 后台长时间运行iOS进入后台长时间运行后台任务ios实现长时间后台运行 解决方案二: 写成service,一共写成两个service,一个service监听另外一个service,一旦另外一个被kill之后,就立刻启动一个.这样的方式来实现后台长期运行. 解决方案三: 1.用service. 2.监听广播复活service. 3.多

android 后台运行-android 项目后台运行一段时间会自己退出并报错

问题描述 android 项目后台运行一段时间会自己退出并报错 最近的一个项目 当我运行项目在后台运行然后过段时间 他会自己报错并退出,在模拟器上不报错,请高手指点是什么原因. 解决方案 用模拟器重新运行试试

android后台运行,由于内存紧张把我的应用内存回收了或是kill了怎么恢复?

问题描述 android后台运行,由于内存紧张把我的应用内存回收了或是kill了怎么恢复? android后台运行,由于内存紧张把我的应用内存回收了或是kill了怎么恢复? 解决方案 kill了进程就没有了,所有没有保存的数据,内存中的数据就没有了. 你应该在本地用sqlite保存这些数据,或者联网上传数据.下次启动读入,恢复程序. 解决方案二: android应用程序,执行了就占用内在.如果使用内存的优化,清除也就是将应用程序删除了,终止运行. 设计比较好的应用程序,在退出程序时,将重要的数据

android模拟器-android 5.0模拟器如何查看后台正在运行的程序??长按home键无效

问题描述 android 5.0模拟器如何查看后台正在运行的程序??长按home键无效 解决方案 [android]仿照长按home键 恢复后台运行程序 解决方案二: Settings --> Apps --> RUNNING 下就是正在运行的APP列表 解决方案三: 你点击一下MENU菜单键看看,貌似5.0后,那个功能放在菜单键了,而弹出菜单功能改为长按菜单键,

Android 判断app是否在前台还是在后台运行

Android 判断app是否在前台还是在后台运行,直接看代码,可直接使用. [java] view plaincopy public static boolean isBackground(Context context) {           ActivityManager activityManager = (ActivityManager) context                   .getSystemService(Context.ACTIVITY_SERVICE);