Java Can';似乎没有减少我的Android应用程序的内存使用,5个异步任务赢了';关不上
我已经开发了一个Android应用程序,我对它的功能等相当满意,也就是说,bug的数量非常少,所以我开始寻找降低应用程序内存需求的方法 在应用程序中,我使用了许多异步任务,每个任务似乎都能很好地执行它们所需的功能,最后为了确保它们已关闭,我甚至添加了这个;或Async1.取消(true);等等 在使用我的Android应用程序的某些时候,当我们等待使用时按下按钮等,它根本不做任何事情,在这些时候,不应该有任何任务在后台运行(如上所述) 但通过使用Android Studio调试器,我注意到5个异步任务没有关闭,即使它们分配的任务已完成,我也明确要求它们在这些任务完成时关闭 要清楚的是,这些异步任务没有被指示等待特定事件等。我已经明确告诉他们关闭 下面是调试的转储: 全线程转储Java Can';似乎没有减少我的Android应用程序的内存使用,5个异步任务赢了';关不上,java,android,multithreading,android-studio,android-asynctask,Java,Android,Multithreading,Android Studio,Android Asynctask,我已经开发了一个Android应用程序,我对它的功能等相当满意,也就是说,bug的数量非常少,所以我开始寻找降低应用程序内存需求的方法 在应用程序中,我使用了许多异步任务,每个任务似乎都能很好地执行它们所需的功能,最后为了确保它们已关闭,我甚至添加了这个;或Async1.取消(true);等等 在使用我的Android应用程序的某些时候,当我们等待使用时按下按钮等,它根本不做任何事情,在这些时候,不应该有任何任务在后台运行(如上所述) 但通过使用Android Studio调试器,我注意到5个异
"AsyncTask #1@4076" prio=5 waiting
java.lang.Thread.State: WAITING
blocks AsyncTask #1@4076
at java.lang.Object.wait(Object.java:-1)
at java.lang.Thread.parkFor$(Thread.java:1220)
- locked <0x100a> (a java.lang.Object)
at sun.misc.Unsafe.park(Unsafe.java:299)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
"AsyncTask #2@4085" prio=5 waiting
java.lang.Thread.State: WAITING
blocks AsyncTask #2@4085
at java.lang.Object.wait(Object.java:-1)
at java.lang.Thread.parkFor$(Thread.java:1220)
- locked <0x100b> (a java.lang.Object)
at sun.misc.Unsafe.park(Unsafe.java:299)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
"AsyncTask #3@4088" prio=5 waiting
java.lang.Thread.State: WAITING
blocks AsyncTask #3@4088
at java.lang.Object.wait(Object.java:-1)
at java.lang.Thread.parkFor$(Thread.java:1220)
- locked <0x100c> (a java.lang.Object)
at sun.misc.Unsafe.park(Unsafe.java:299)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
"AsyncTask #4@4091" prio=5 waiting
java.lang.Thread.State: WAITING
blocks AsyncTask #4@4091
at java.lang.Object.wait(Object.java:-1)
at java.lang.Thread.parkFor$(Thread.java:1220)
- locked <0x100d> (a java.lang.Object)
at sun.misc.Unsafe.park(Unsafe.java:299)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
"AsyncTask #5@4092" prio=5 waiting
java.lang.Thread.State: WAITING
blocks AsyncTask #5@4092
at java.lang.Object.wait(Object.java:-1)
at java.lang.Thread.parkFor$(Thread.java:1220)
- locked <0x100e> (a java.lang.Object)
at sun.misc.Unsafe.park(Unsafe.java:299)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
"FinalizerDaemon@4070" daemon prio=5 waiting
java.lang.Thread.State: WAITING
blocks FinalizerDaemon@4070
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:423)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:101)
- locked <0x1008> (a java.lang.ref.ReferenceQueue)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:72)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:185)
at java.lang.Thread.run(Thread.java:818)
"main@4067" prio=5 runnable
java.lang.Thread.State: RUNNABLE
at android.os.MessageQueue.nativePollOnce(MessageQueue.java:-1)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Method.java:-1)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
"FinalizerWatchdogDaemon@4071" daemon prio=5 waiting
java.lang.Thread.State: WAITING
blocks FinalizerWatchdogDaemon@4071
at java.lang.Object.wait(Object.java:-1)
at java.lang.Daemons$FinalizerWatchdogDaemon.waitForObject(Daemons.java:255)
- locked <0x1009> (a java.lang.Daemons$FinalizerWatchdogDaemon)
at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:227)
at java.lang.Thread.run(Thread.java:818)
"ReferenceQueueDaemon@4069" daemon prio=5 waiting
java.lang.Thread.State: WAITING
blocks ReferenceQueueDaemon@4069
at java.lang.Object.wait(Object.java:-1)
at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:147)
- locked <0xc38> (a java.lang.Class)
at java.lang.Thread.run(Thread.java:818)
"Timer-0@4075" prio=5 waiting
java.lang.Thread.State: WAITING
blocks Timer-0@4075
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:423)
at java.util.Timer$TimerImpl.run(Timer.java:238)
- locked <0xfeb> (a java.util.Timer$TimerImpl)
"HeapTaskDaemon@4072" daemon prio=5 waiting for monitor entry
java.lang.Thread.State: BLOCKED
at dalvik.system.VMRuntime.runHeapTasks(VMRuntime.java:-1)
at java.lang.Daemons$HeapTaskDaemon.run(Daemons.java:355)
at java.lang.Thread.run(Thread.java:818)
"Signal Catcher@4068" daemon prio=5 waiting
java.lang.Thread.State: WAITING
Incompatible thread state: thread not suspended
"Binder_1@4073" prio=5 runnable
java.lang.Thread.State: RUNNABLE
Incompatible thread state: thread not suspended
"Binder_2@4074" prio=5 runnable
java.lang.Thread.State: RUNNABLE
Incompatible thread state: thread not suspended
"RenderThread@4077" prio=5 runnable
java.lang.Thread.State: RUNNABLE
Incompatible thread state: thread not suspended
"hwuiTask1@4078" prio=5 runnable
java.lang.Thread.State: RUNNABLE
Incompatible thread state: thread not suspended
"hwuiTask2@4079" prio=5 runnable
java.lang.Thread.State: RUNNABLE
Incompatible thread state: thread not suspended
"Binder_3@4100" prio=5 runnable
java.lang.Thread.State: RUNNABLE
Incompatible thread state: thread not suspended
异步任务#1@4076“prio=5等待
java.lang.Thread.State:正在等待
块异步任务#1@4076
在java.lang.Object.wait(Object.java:-1)
位于java.lang.Thread.parkFor$(Thread.java:1220)
-锁定(一个java.lang.Object)
在sun.misc.Unsafe.park(Unsafe.java:299)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
运行(Thread.java:818)
“异步任务#2@4085“prio=5等待
java.lang.Thread.State:正在等待
块异步任务#2@4085
在java.lang.Object.wait(Object.java:-1)
位于java.lang.Thread.parkFor$(Thread.java:1220)
-锁定(一个java.lang.Object)
在sun.misc.Unsafe.park(Unsafe.java:299)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
运行(Thread.java:818)
“异步任务#3@4088“prio=5等待
java.lang.Thread.State:正在等待
块异步任务#3@4088
在java.lang.Object.wait(Object.java:-1)
位于java.lang.Thread.parkFor$(Thread.java:1220)
-锁定(一个java.lang.Object)
在sun.misc.Unsafe.park(Unsafe.java:299)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
运行(Thread.java:818)
“异步任务#4@4091“prio=5等待
java.lang.Thread.State:正在等待
块异步任务#4@4091
在java.lang.Object.wait(Object.java:-1)
位于java.lang.Thread.parkFor$(Thread.java:1220)
-锁定(一个java.lang.Object)
在sun.misc.Unsafe.park(Unsafe.java:299)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
运行(Thread.java:818)
“异步任务#5@4092“prio=5等待
java.lang.Thread.State:正在等待
块异步任务#5@4092
在java.lang.Object.wait(Object.java:-1)
位于java.lang.Thread.parkFor$(Thread.java:1220)
-锁定(一个java.lang.Object)
在sun.misc.Unsafe.park(Unsafe.java:299)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1038)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
运行(Thread.java:818)
"FinalizerDaemon@4070“守护进程prio=5正在等待
java.lang.Thread.State:正在等待
阻碍FinalizerDaemon@4070
在java.lang.Object.wait(Object.java:-1)
等待(Object.java:423)
位于java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:101)
-锁定(java.lang.ref.ReferenceQueue)
在java.lang.ref.ReferenceQueue.remove(ReferenceQu