2 clcurie 11 clcurie_11 于 2013.03.06 09:46 提问

AsyncTask 里的代码不能执行

程序中有一个 AsyncTask 方法,当程序退出之前会被执行。它可以得到当前位置并解析 xml配置文件。当前位置被检索了,但是解析操作未执行。
在 Main Activity 中调用 AsyncTask

   public void quitApplication()
        {       
            FinishProcess fProcess = new FinishProcess();
            fProcess.execute(this);
    }
AsyncTask:
public class FinishProcess extends AsyncTask<Main, Void, Void>
{
    @Override
    protected Void doInBackground(Main... params) {
        LocationHandler lh = new LocationHandler();
        try {
            lh.getLocationSingle(null, params[0]);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        parseXML(params[0]);
        return null;
    }
    private void parseXML(Main params)
    {
        String ANDROID_ID = "android:id";       
        Resources resources = params.getResources();
        try {
            InputStream fXmlFile = resources.openRawResource(R.raw.pages);
            //Reads xml file and gets the node types and attributes
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();
            NodeList nList = doc.getElementsByTagName("*");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);   
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    System.out.println(eElement.getNodeName());
                }
            }
        } 
        catch (Exception e) {
            System.out.println("Catch");
            e.printStackTrace();
        }
    }
}

3个回答

LiDaming_and
LiDaming_and   2013.03.06 15:29
已采纳

如果你的应用程序启动完上面这段程序后就退出,那么当主线程在 AsyncTask 运行时,主线程就可能死亡,从而就会孤立它。如果在退出时候需要这样做,就在 Application.onTerminate 线程中运行,不要在 AsyncTask 线程中。

A328240784
A328240784   2013.03.06 15:40

程序都被停止了,你Asynctask就不是程序中的其中一部分??????

A328240784
A328240784 你怎么判定是退出之前执行。我没看到你在post里面退出。
5 年多之前 回复
clcurie_11
clcurie_11 是程序退出之前执行。谢谢您的回答!
5 年多之前 回复
aomandeshangxiao
aomandeshangxiao   2013.03.12 15:45

建议在Application.onTerminate中,但是该方法不一定被调用,在 AsyncTask写退出代码试一下。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
深入理解为什么AsyncTask只能被执行一次
看该篇文章前,我推荐了另外一篇博客,看完再来看该篇博客。   Android源码分析—带你认识不一样的AsyncTask 接下来,就来分析为什么AsyncTask只能被执行一次: public final AsyncTask execute(Params... params) { return executeOnExecutor(sDefault
巧用AsyncTask的onProgressUpdate回调
AsyncTask简介AsyncTask相信大家已经特别熟悉了,它是Android提供的一个轻量级的异步处理类。它简单易用,可以很容易地执行后台任务,也可以很方便地将后台任务执行的进度与结果发送到UI线程。爱与恨由于Android的单线程模型,异步处理在Android开发中显得尤为重要,因此线程中的交互不可避免。假如我们利用Android消息机制自己实现这个过程,则较为复杂且有着发生各种各样错误的风
AsyncTask 坑 (三)AsyncTask对象多次执行
经常看到网上有这种面试题目:一个AsyncTask对象能不能被多次执行? 其实,想知道答案,最好的办法就是看文档说明,要是文档说不行那就是不行,行就是行。 如果想知道的更多,那就看代码呗。 AsyncTask的execute函数 excute是用来启动一个异步任务的API,先看看这个函数, @MainThread public final AsyncTask ex
Android中如何处理耗时操作,AsyncTask有什么不足之处.
Android中处理耗时操作的基本思路为将耗时的操作放到非UI线程执行.常用的是AsyncTask,Handler,Thread,Executors等.关于放在非UI线程处理的思路大概有这样几种,一种是每次耗时操作启动一个线程,代价比较大,另一种是将所有的一部分放入队列,有一个或者几个线程去执行,例如HandlerThread和AsyncTask.AsyncTask使用起来比较轻量,但是自身也存在一
AsyncTask的doInBackground方法延迟执行的问题
今天发现一个很奇葩的bug,当使用asyncTask去执行后台下载任务时发现其他的接口都不好用了,一直在加载中,debug发现doInBackground方法不执行,要等到下载任务完成才会正常执行。。。在网上搜发现了此贴解决了这个问题 本文转自 http://blog.csdn.net/mddy2001/article/details/17127065  故事背景:一个HttpURL
在Android Service中使用AsyncTask执行任务
public class MyService extends Service { @Override public void onCreate() { super.onCreate(); Log.i("Service","Service onCreate"); } @Nullable @Override public IBi
AsyncTask的execute并没有立即执行
百度下,也是有不少方案和AsyncTask原理讲解的,匆匆忙忙地找了,实践有效,也没时间看下原理(看了也记不太清楚),在此做下记录。 原因不讲了,也讲不清楚,解决方案就是利用executeOnExecutor设置自己的队列,从而在旧页面关闭前能及时清理当前页面发出的数据请求; Ps:tasks为一个ArrayList,用来存储当前界面所有产生的task,executeOnExecutor能清除
AsyncTask引发的一个问题:doInBackground()未及时执行
在公司实习时遇到一个很奇怪的问题,doInBackground()未及时执行,也就是它并没有在#execute()调用之后马上执行,而是等待了很久才得以执行。 查资料了解到:因为是4.0平台,所以所有 的AsyncTask并不都会运行在单独的线程中,而是被SERIAL_EXECUTOR顺序的使用线程执行。因为我的应用中还有其他地方使用 AsyncTask,所以到网络取图片的AsyncTask也许
调用AsyncTask的excute方法不能立即执行程序的原因分析及改善方案
最近在项目中遇到一个关于调用AsyncTask的excute方法不能立即执行程序的问题,项目的targetSdkVersion是15,最后分析发现是AsyncTask的运行机制导致,特地总结出来以免后面再犯同样的错误。 通过源码分析AsyncTask的工作原理 AsyncTask官方文档解读 AsyncTask介绍   AsyncTask是一个Android SDK中轻量级
工作随笔:BaseAsyncTask执行完doInBackground不执行onPostExecute
项目使用AndroidAppFrameWork的BaseAsyncTask做了大量的网络请求,今天在做版本兼容(测试机版本4.0.4)的时候,没注意在哪里做了什么修改,onPostExecute方法突然都不执行了,一步一步的还原,发现还是有问题,弄的头好大。 万事不决问度娘,看了好多小伙伴的文章,还是没发现问题的原因所在,又新建了Demo做测试,发现Demo里BaseAsyncTask的onPo