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

, 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-09-24 10:30:13

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

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

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

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);  

android 后台服务-android app安装时最后一步提示后台运行 这个radiobutton 怎样才能实现:默认勾选

问题描述 android app安装时最后一步提示后台运行 这个radiobutton 怎样才能实现:默认勾选 android app安装时最后一步提示后台运行 这个radiobutton 怎样才能实现:默认勾选 如微信,京东 都实现了 解决方案 LZ解决了吗?特地下载了微信安装测试,发现它默认勾选了! 解决方案二: lz解决了吗?我也一直被这个问题困扰

详解Android 视频播放时停止后台运行的方法

详解Android 视频播放时停止后台运行的方法 在项目中,遇到了视频播放,可是后台播放的音乐也同时播放,我们要的效果肯定是视频播放的时候,音乐暂停,视频播放完了我们就继续播放音乐,于是就找到了这个方法. /**@param bMute 值为true时为关闭背景音乐.*/ @TargetApi(Build.VERSION_CODES.FROYO) public static boolean muteAudioFocus(Context context, boolean bMute) { if(c