AsyncTask的有时会崩溃 [英] AsyncTask crashes sometimes

查看:251
本文介绍了AsyncTask的有时会崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的一个主要AsyncTasks似乎偶尔崩溃(进度条冻结,进程停止),我不知道如果我做错了什么在我的code。

它看起来像当我的银河S2开始对电池低位运行,可能会发生 - 这似乎与有关亮度控制一些错误一致。虽然这些无论是从错误的错误或结果的原因是我一直没能确定。此外,由于电池似乎总是在低位运行,这可能甚至不相关的!

这有什么,我做这个的AsyncTask这是错的?实际上,我只使用AsyncTask的一个处理程序执行实际的计算机的回合之前显示三个进度条(电脑玩家)之一。

这也从未报道过Android市场上。当它发生时为我的最终用户,如果它是由InterruptedException的引起我应该同时打印堆栈跟踪,使我得到了用户错误?

  //宣言活动的最高水平
私人ComputerPlayerTask mComputerPlayerTask =新ComputerPlayerTask();
//任务的执行一个随机整数值
mComputerPlayerTask =新ComputerPlayerTask();
mComputerPlayerTask.execute(randomInt);私有类ComputerPlayerTask扩展
        AsyncTask的<整数,整数,布尔> {    私人进度mProgressBar;
    @覆盖
    保护布尔doInBackground(整数... PARAMS){
        INT delayTime =参数[0];        mProgressBar.setMax(delayTime - 1);        的for(int i = 0; I< delayTime;我++){
            尝试{
                视频下载(500);
            }赶上(InterruptedException的E){
                Log.e(DEBUG_TAG,不能睡线程);
            }
            如果(mPause){
                一世 - ;
            }其他{
                publishProgress(1);
            }
        }
        返回true;
    }    @覆盖
    保护无效onPostExecute(布尔结果){
        mProgressBar.setVisibility(View.INVISIBLE);
        mMainHandler.sendEmptyMessage(WHAT_COMPUTER_TURN);
        super.onPostExecute(结果);
    }    @覆盖
    在preExecute保护无效(){
        mProgressBar =(进度)findViewById(playerProgressBarMap
                获得(Player.getCurrentPlayer()));
        mProgressBar.setProgress(0);
        如果(!mSpeed​​Up){
            mProgressBar.setVisibility(View.VISIBLE);
        }
    }    @覆盖
    保护无效onCancelled(){
        Log.i(DEBUG_TAGonCancelled);
        mProgressBar.setVisibility(View.INVISIBLE);
    }    @覆盖
    保护无效onProgressUpdate(整数...值){
        mProgressBar.incrementProgressBy(值[0]);
    }}

我终于得到了市场对这个问题的报告。你可以看到,AsyncTasks都在等待着什么。难道这是通过设置进度条丹尼尔和威霆的时间已经造成或者说是有什么别的问题?

  DALVIK主题:
(互斥:TLL = 0 TSL = 0 TSCL = 0 GHL = 0和黄= 0 hwll = 0)
主PRIO = 5 TID = 1 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x400281b8 = 0xcec0
  | sysTid = 19207漂亮= 0 =附表0/0 = CGRP默认手柄= -1345006496
  | schedstat =(108745487102 22285195732 39534)
  在android.media.SoundPool.play(本机方法)
  在com.bazsoft.yaniv.SoundManager.playSound(SoundManager.java:83)
  在com.bazsoft.yaniv.YanivGameActivity.displayPileCards(YanivGameActivity.java:551)
  在com.bazsoft.yaniv.YanivGameActivity.displayCards(YanivGameActivity.java:506)
  在com.bazsoft.yaniv.YanivGameActivity.access $ 6(YanivGameActivity.java:500)
  在com.bazsoft.yaniv.YanivGameActivity $ ComputerHandler.handleMessage(YanivGameActivity.java:111)
  在android.os.Handler.dispatchMessage(Handler.java:99)
  在android.os.Looper.loop(Looper.java:123)
  在android.app.ActivityThread.main(ActivityThread.java:3691)
  在java.lang.reflect.Method.invokeNative(本机方法)
  在java.lang.reflect.Method.invoke(Method.java:507)
  在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:847)
  在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
  在dalvik.system.NativeStart.main(本机方法)AsyncTask的#5PRIO = 5 TID = 14 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x40573f38 = 0x27bca0
  | sysTid = 19282漂亮= 10 =附表0/0 = CGRP手柄bg_non_interactive = 2118216
  | schedstat =(101862790 1754080269 477)
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x4052b1a8 GT; (一java.lang.VMThread)
  在java.lang.Thread.parkFor(Thread.java:1424)
  在java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  在sun.misc.Unsafe.park(Unsafe.java:337)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
  在java.lang.Thread.run(Thread.java:1019)AsyncTask的#4PRIO = 5 TID = 13 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x40584508 = 0x27b8c0
  | sysTid = 19278漂亮= 10 =附表0/0 = CGRP手柄bg_non_interactive = 2712376
  | schedstat =(45122127 1293929987 198)
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x40584668 GT; (一java.lang.VMThread)
  在java.lang.Thread.parkFor(Thread.java:1424)
  在java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  在sun.misc.Unsafe.park(Unsafe.java:337)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
  在java.lang.Thread.run(Thread.java:1019)AsyncTask的#3PRIO = 5 TID = 12 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4056ffb8 = 0x27b378
  | sysTid = 19271漂亮= 10 =附表0/0 = CGRP手柄bg_non_interactive = 1318248
  | schedstat =(50782335 1392327423 217)
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x405700e8 GT; (一java.lang.VMThread)
  在java.lang.Thread.parkFor(Thread.java:1424)
  在java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  在sun.misc.Unsafe.park(Unsafe.java:337)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
  在java.lang.Thread.run(Thread.java:1019)AsyncTask的#2PRIO = 5 TID = 11 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4057aa50 = 0x2b08b8
  | sysTid = 19266漂亮= 10 =附表0/0 = CGRP手柄bg_non_interactive = 2107320
  | schedstat =(47150870 1245297244 204)
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x4057ab80 GT; (一java.lang.VMThread)
  在java.lang.Thread.parkFor(Thread.java:1424)
  在java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  在sun.misc.Unsafe.park(Unsafe.java:337)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
  在java.lang.Thread.run(Thread.java:1019)AsyncTask的#1PRIO = 5 TID = 10 WAIT
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4057e3e0 = 0x225e60
  | sysTid = 19260漂亮= 10 =附表0/0 = CGRP手柄bg_non_interactive = 2252696
  | schedstat =(47511668 1323908745 205)
  在java.lang.Object.wait(本机方法)
   - 等待针对<&0x4057e5b8 GT; (一java.lang.VMThread)
  在java.lang.Thread.parkFor(Thread.java:1424)
  在java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  在sun.misc.Unsafe.park(Unsafe.java:337)
  在java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  在java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
  在java.lang.Thread.run(Thread.java:1019)SoundPoolThreadPRIO = 5 TID = 9 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x40513680 = 0x188e38
  | sysTid = 19234漂亮= 0 =附表0/0 = CGRP默认手柄= 1798920
  | schedstat =(4164749 2002043 34)
  在dalvik.system.NativeStart.run(本机方法)的SoundpoolPRIO = 5 TID = 8 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x40518668 = 0x188d00
  | sysTid = 19233漂亮= 0 =附表0/0 = CGRP默认手柄= 1799064
  | schedstat =(154125 0 1)
  在dalvik.system.NativeStart.run(本机方法)捆扎线#2PRIO = 5 TID = 7 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4051e608 = 0x8ad90
  | sysTid = 19213漂亮= 0 =附表0/0 = CGRP默认手柄= 1104984
  | schedstat =(7442210 75731553 65)
  在dalvik.system.NativeStart.run(本机方法)捆扎线#1PRIO = 5 TID = 6 NATIVE
  |组=主SCOUNT = 1 dsCount = 0 = OBJ自我0x4051ca20 = 0x10cf90
  | sysTid = 19212漂亮= 0 =附表0/0 = CGRP默认手柄= 1098888
  | schedstat =(8834252 62834840 68)
  在dalvik.system.NativeStart.run(本机方法)编译器守护PRIO = 5 TID = 5 VMWAIT
  |组=系统SCOUNT = 1 dsCount = 0 = OBJ自我0x405189a0 = 0x10c978
  | sysTid = 19211漂亮= 0 =附表0/0 = CGRP默认手柄= 1105168
  | schedstat =(826648662 443778935 3811)
  在dalvik.system.NativeStart.run(本机方法)信号守望者守护PRIO = 5 TID = 4 RUNNABLE
  |组=系统SCOUNT = 0 dsCount = 0 = OBJ自我0x405188e0 = 0x10c810
  | sysTid = 19210漂亮= 0 =附表0/0 = CGRP默认手柄= 1093320
  | schedstat =(2793168 631667 8)
  在dalvik.system.NativeStart.run(本机方法)GC守护PRIO = 5 TID = 3 VMWAIT
  |组=系统SCOUNT = 1 dsCount = 0 = OBJ自我0x40518838 = 0x10c6a0
  | sysTid = 19209漂亮= 0 =附表0/0 = CGRP默认手柄= 1097888
  | schedstat =(40991755 61721634 20)
  在dalvik.system.NativeStart.run(本机方法)HeapWorker守护PRIO = 5 TID = 2 VMWAIT
  |组=系统SCOUNT = 1 dsCount = 0 = OBJ自我0x40518780 = 0x10c538
  | sysTid = 19208漂亮= 0 =附表0/0 = CGRP默认手柄= 1098528
  | schedstat =(624790039 112243012 376)
  在dalvik.system.NativeStart.run(本机方法)


解决方案

您不能处理其他线程的用户界面。我看到你打电话 mProgressBar.setMax(delayTime - 1); 的doInBackground()方法,它是在后台线程中执行的内部。这将导致的问题。你必须在preExecute()或其他方法中移动这个code。

One of my main AsyncTasks seems to be crashing occasionally (the progress bar freezes and the process stops) and I wondered if I was doing something wrong in my code.

It looks like it may happen when my Galaxy S2 starts to run low on battery - it seems to coincide with some errors regarding the brightness controls. Although whether these are the cause of the error or result from the error is something I haven't been able to determine. Also, since the battery always seems to be running low this may not even be related!

Is there anything that I'm doing in this AsyncTask that is wrong? I'm actually only using the AsyncTask to display one of three progress bars (the computer players) before executing the actual computer's turn with a handler.

Also this has never been reported on the Android market. If it is caused by the InterruptedException should I also print the stack trace so that I get the user error when it occurs for my end users?

//Declaration at top level of activity
private ComputerPlayerTask mComputerPlayerTask = new ComputerPlayerTask();


// Execution of the task with a random integer value
mComputerPlayerTask = new ComputerPlayerTask();         
mComputerPlayerTask.execute(randomInt);

private class ComputerPlayerTask extends
        AsyncTask<Integer, Integer, Boolean> {

    private ProgressBar mProgressBar;


    @Override
    protected Boolean doInBackground(Integer... params) {
        int delayTime = params[0];

        mProgressBar.setMax(delayTime - 1);

        for (int i = 0; i < delayTime; i++) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                Log.e(DEBUG_TAG, "Can't sleep thread");
            }
            if (mPause) {
                i--;
            } else {
                publishProgress(1);
            }
        }
        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        mProgressBar.setVisibility(View.INVISIBLE);
        mMainHandler.sendEmptyMessage(WHAT_COMPUTER_TURN);
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        mProgressBar = (ProgressBar) findViewById(playerProgressBarMap
                .get(Player.getCurrentPlayer()));
        mProgressBar.setProgress(0);
        if (!mSpeedUp) {
            mProgressBar.setVisibility(View.VISIBLE);
        }
    }

    @Override
    protected void onCancelled() {
        Log.i(DEBUG_TAG, "onCancelled");
        mProgressBar.setVisibility(View.INVISIBLE);
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        mProgressBar.incrementProgressBy(values[0]);
    }

}

I've finally got a report from the market about this issue. You can see that the AsyncTasks are all waiting for something. Could this be caused by setting the duration of the progress bar as Daniel and Vito have stated or is there something else wrong?

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x400281b8 self=0xcec0
  | sysTid=19207 nice=0 sched=0/0 cgrp=default handle=-1345006496
  | schedstat=( 108745487102 22285195732 39534 )
  at android.media.SoundPool.play(Native Method)
  at com.bazsoft.yaniv.SoundManager.playSound(SoundManager.java:83)
  at com.bazsoft.yaniv.YanivGameActivity.displayPileCards(YanivGameActivity.java:551)
  at com.bazsoft.yaniv.YanivGameActivity.displayCards(YanivGameActivity.java:506)
  at com.bazsoft.yaniv.YanivGameActivity.access$6(YanivGameActivity.java:500)
  at com.bazsoft.yaniv.YanivGameActivity$ComputerHandler.handleMessage(YanivGameActivity.java:111)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:123)
  at android.app.ActivityThread.main(ActivityThread.java:3691)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
  at dalvik.system.NativeStart.main(Native Method)

"AsyncTask #5" prio=5 tid=14 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x40573f38 self=0x27bca0
  | sysTid=19282 nice=10 sched=0/0 cgrp=bg_non_interactive handle=2118216
  | schedstat=( 101862790 1754080269 477 )
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4052b1a8> (a java.lang.VMThread)
  at java.lang.Thread.parkFor(Thread.java:1424)
  at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  at sun.misc.Unsafe.park(Unsafe.java:337)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  at java.lang.Thread.run(Thread.java:1019)

"AsyncTask #4" prio=5 tid=13 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x40584508 self=0x27b8c0
  | sysTid=19278 nice=10 sched=0/0 cgrp=bg_non_interactive handle=2712376
  | schedstat=( 45122127 1293929987 198 )
  at java.lang.Object.wait(Native Method)
  - waiting on <0x40584668> (a java.lang.VMThread)
  at java.lang.Thread.parkFor(Thread.java:1424)
  at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  at sun.misc.Unsafe.park(Unsafe.java:337)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  at java.lang.Thread.run(Thread.java:1019)

"AsyncTask #3" prio=5 tid=12 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4056ffb8 self=0x27b378
  | sysTid=19271 nice=10 sched=0/0 cgrp=bg_non_interactive handle=1318248
  | schedstat=( 50782335 1392327423 217 )
  at java.lang.Object.wait(Native Method)
  - waiting on <0x405700e8> (a java.lang.VMThread)
  at java.lang.Thread.parkFor(Thread.java:1424)
  at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  at sun.misc.Unsafe.park(Unsafe.java:337)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  at java.lang.Thread.run(Thread.java:1019)

"AsyncTask #2" prio=5 tid=11 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4057aa50 self=0x2b08b8
  | sysTid=19266 nice=10 sched=0/0 cgrp=bg_non_interactive handle=2107320
  | schedstat=( 47150870 1245297244 204 )
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4057ab80> (a java.lang.VMThread)
  at java.lang.Thread.parkFor(Thread.java:1424)
  at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  at sun.misc.Unsafe.park(Unsafe.java:337)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  at java.lang.Thread.run(Thread.java:1019)

"AsyncTask #1" prio=5 tid=10 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x4057e3e0 self=0x225e60
  | sysTid=19260 nice=10 sched=0/0 cgrp=bg_non_interactive handle=2252696
  | schedstat=( 47511668 1323908745 205 )
  at java.lang.Object.wait(Native Method)
  - waiting on <0x4057e5b8> (a java.lang.VMThread)
  at java.lang.Thread.parkFor(Thread.java:1424)
  at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
  at sun.misc.Unsafe.park(Unsafe.java:337)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:411)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1021)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
  at java.lang.Thread.run(Thread.java:1019)

"SoundPoolThread" prio=5 tid=9 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x40513680 self=0x188e38
  | sysTid=19234 nice=0 sched=0/0 cgrp=default handle=1798920
  | schedstat=( 4164749 2002043 34 )
  at dalvik.system.NativeStart.run(Native Method)

"SoundPool" prio=5 tid=8 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x40518668 self=0x188d00
  | sysTid=19233 nice=0 sched=0/0 cgrp=default handle=1799064
  | schedstat=( 154125 0 1 )
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #2" prio=5 tid=7 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4051e608 self=0x8ad90
  | sysTid=19213 nice=0 sched=0/0 cgrp=default handle=1104984
  | schedstat=( 7442210 75731553 65 )
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #1" prio=5 tid=6 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4051ca20 self=0x10cf90
  | sysTid=19212 nice=0 sched=0/0 cgrp=default handle=1098888
  | schedstat=( 8834252 62834840 68 )
  at dalvik.system.NativeStart.run(Native Method)

"Compiler" daemon prio=5 tid=5 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x405189a0 self=0x10c978
  | sysTid=19211 nice=0 sched=0/0 cgrp=default handle=1105168
  | schedstat=( 826648662 443778935 3811 )
  at dalvik.system.NativeStart.run(Native Method)

"Signal Catcher" daemon prio=5 tid=4 RUNNABLE
  | group="system" sCount=0 dsCount=0 obj=0x405188e0 self=0x10c810
  | sysTid=19210 nice=0 sched=0/0 cgrp=default handle=1093320
  | schedstat=( 2793168 631667 8 )
  at dalvik.system.NativeStart.run(Native Method)

"GC" daemon prio=5 tid=3 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x40518838 self=0x10c6a0
  | sysTid=19209 nice=0 sched=0/0 cgrp=default handle=1097888
  | schedstat=( 40991755 61721634 20 )
  at dalvik.system.NativeStart.run(Native Method)

"HeapWorker" daemon prio=5 tid=2 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x40518780 self=0x10c538
  | sysTid=19208 nice=0 sched=0/0 cgrp=default handle=1098528
  | schedstat=( 624790039 112243012 376 )
  at dalvik.system.NativeStart.run(Native Method)

解决方案

You can't manipulate the UI from other threads. And I see that you are calling mProgressBar.setMax(delayTime - 1); inside the doInBackground() method, which is executed in a background thread. This will cause problems. You have to move this code inside onPreExecute() or other method.

这篇关于AsyncTask的有时会崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆