Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';似乎没有减少我的Android应用程序的内存使用,5个异步任务赢了';关不上_Java_Android_Multithreading_Android Studio_Android Asynctask - Fatal编程技术网

Java Can';似乎没有减少我的Android应用程序的内存使用,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个异

我已经开发了一个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