asynctask内doinbackground中的java方法在处理许多元素时执行两次

pgccezyw  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(163)

我有一个 AsyncTask 在中执行外部方法的 doInBackground 我可以用下面的方式来描述这个结构:

myMethod{
     new AsyncTask<Object, Void, Void>() {
         @Override
         protected Void doInBackground(Object... params) {
             Elements x=getElements();
             process(x);
         }
         ....
    }.execute();

    private void process(Elements x){
        if(x.getElementsNumber()>0){
             Drawing d=x.extractDrawing();  
             showElements(d);
             drawElementsOnImage(d);
        }
        else{
             noElementsWarning();
        }
}

方法 drawElementsOnImage(d) 在画布上绘制元素 ImageView . 一切正常,但如果有超过15个元素,会发生一些奇怪的事情,在正确的结果显示给视频后会出现一些异常, process(Elements x) 被称为第二次展示 noElementsWarning() 这个问题快把我逼疯了。我不知道这种荒谬行为的原因,我可以假设内存有些不足,因为发生在较长的元素列表中,但我看不到堆栈中有任何相关的错误。
如果我移除了内部方法中的所有try-catch块来揭开其他可能导致问题的原因,那么我有一个 NullPointer 由事实引起的例外 x 在第二次执行中根本没有初始化。如果我评论这句话,恶作剧就不会执行了

drawElementsOnImage(d);

这个方法基本上有一些嵌套的 for 循环 float 原语和对 canvas.drawPoint() 绘制相关结果 ImageView 有什么建议或者我得找个驱魔师?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题