How to solve the "HeapWorker wedged in" error in Android?

I get data from the server in large quantities. I use the Get method to get the answer, and I can get the answer, but the problem is that there is a failure between the application processing due to the "Headwork wedge" error.

Logcat

12-20 10:02:55.111: ERROR/dalvikvm(277): HeapWorker is wedged: 10194ms spent inside Landroid/database/sqlite/SQLiteCursor;.finalize()V 12-20 10:02:55.111: INFO/dalvikvm(277): DALVIK THREADS: 12-20 10:02:55.111: INFO/dalvikvm(277): "main" prio=5 tid=3 NATIVE 12-20 10:02:55.111: INFO/dalvikvm(277): | group="main" sCount=1 dsCount=0 s=Y obj=0x4001b268 self=0xbd00 12-20 10:02:55.111: INFO/dalvikvm(277): | sysTid=277 nice=0 sched=0/0 cgrp=default handle=-1344001384 12-20 10:02:55.111: INFO/dalvikvm(277): at android.graphics.NinePatch.nativeDraw(Native Method) 12-20 10:02:55.111: INFO/dalvikvm(277): at android.graphics.NinePatch.draw(NinePatch.java:104) 12-20 10:02:55.111: INFO/dalvikvm(277): at android.graphics.drawable.NinePatchDrawable.draw(NinePatchDrawable.java:188) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.View.draw(View.java:6520) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.widget.FrameLayout.draw(FrameLayout.java:352) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewGroup.drawChild(ViewGroup.java:1531) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewGroup.drawChild(ViewGroup.java:1529) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.View.draw(View.java:6538) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.widget.FrameLayout.draw(FrameLayout.java:352) 12-20 10:02:55.121: INFO/dalvikvm(277): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewRoot.draw(ViewRoot.java:1349) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewRoot.performTraversals(ViewRoot.java:1114) 12-20 10:02:55.121: INFO/dalvikvm(277): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 12-20 10:02:55.132: INFO/dalvikvm(277): at android.os.Handler.dispatchMessage(Handler.java:99) 12-20 10:02:55.132: INFO/dalvikvm(277): at android.os.Looper.loop(Looper.java:123) 12-20 10:02:55.132: INFO/dalvikvm(277): at android.app.ActivityThread.main(ActivityThread.java:4363) 12-20 10:02:55.132: INFO/dalvikvm(277): at java.lang.reflect.Method.invokeNative(Native Method) 12-20 10:02:55.132: INFO/dalvikvm(277): at java.lang.reflect.Method.invoke(Method.java:521) 12-20 10:02:55.132: INFO/dalvikvm(277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 12-20 10:02:55.132: INFO/dalvikvm(277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 12-20 10:02:55.132: INFO/dalvikvm(277): at dalvik.system.NativeStart.main(Native Method) 12-20 10:02:55.132: INFO/dalvikvm(277): "AsyncTask #1" prio=5 tid=15 RUNNABLE 12-20 10:02:55.132: INFO/dalvikvm(277): | group="main" sCount=0 dsCount=0 s=N obj=0x44dd0bd0 self=0x125a30 12-20 10:02:55.132: INFO/dalvikvm(277): | sysTid=283 nice=0 sched=0/0 cgrp=default handle=1203016 12-20 10:02:55.132: INFO/dalvikvm(277): at java.io.BufferedWriter.<init>(BufferedWriter.java:~67) 12-20 10:02:55.132: INFO/dalvikvm(277): at uk.co.dodec.ukrcmobileapp.helper.UDFHelper.createHtml(UDFHelper.java:167) 12-20 10:02:55.132: INFO/dalvikvm(277): at uk.co.dodec.ukrcmobileapp.helper.XMLParser.parseUpdates(XMLParser.java:510) 12-20 10:02:55.132: INFO/dalvikvm(277): at uk.co.dodec.ukrcmobileapp.Homepage$getUpdateTask.doInBackground(Homepage.java:170) 12-20 10:02:55.132: INFO/dalvikvm(277): at uk.co.dodec.ukrcmobileapp.Homepage$getUpdateTask.doInBackground(Homepage.java:1) 12-20 10:02:55.132: INFO/dalvikvm(277): at android.os.AsyncTask$2.call(AsyncTask.java:185) 12-20 10:02:55.132: INFO/dalvikvm(277): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 12-20 10:02:55.132: INFO/dalvikvm(277): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 12-20 10:02:55.141: INFO/dalvikvm(277): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 12-20 10:02:55.141: INFO/dalvikvm(277): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 12-20 10:02:55.141: INFO/dalvikvm(277): at java.lang.Thread.run(Thread.java:1096) 12-20 10:02:55.141: INFO/dalvikvm(277): "Binder Thread #2" prio=5 tid=13 NATIVE 12-20 10:02:55.141: INFO/dalvikvm(277): | group="main" sCount=1 dsCount=0 s=N obj=0x44da1c38 self=0x11d3c8 12-20 10:02:55.141: INFO/dalvikvm(277): | sysTid=282 nice=0 sched=0/0 cgrp=default handle=1343552 12-20 10:02:55.141: INFO/dalvikvm(277): at dalvik.system.NativeStart.run(Native Method) 12-20 10:02:55.141: INFO/dalvikvm(277): "Binder Thread #1" prio=5 tid=11 NATIVE 12-20 10:02:55.141: INFO/dalvikvm(277): | group="main" sCount=1 dsCount=0 s=N obj=0x44d9dea8 self=0x14d8d0 12-20 10:02:55.141: INFO/dalvikvm(277): | sysTid=281 nice=0 sched=0/0 cgrp=default handle=1366160 12-20 10:02:55.141: INFO/dalvikvm(277): at dalvik.system.NativeStart.run(Native Method) 12-20 10:02:55.141: INFO/dalvikvm(277): "JDWP" daemon prio=5 tid=9 VMWAIT 12-20 10:02:55.141: INFO/dalvikvm(277): | group="system" sCount=1 dsCount=0 s=N obj=0x44d9b2a0 self=0x145338 12-20 10:02:55.141: INFO/dalvikvm(277): | sysTid=280 nice=0 sched=0/0 cgrp=default handle=1331744 12-20 10:02:55.141: INFO/dalvikvm(277): at dalvik.system.NativeStart.run(Native Method) 12-20 10:02:55.141: INFO/dalvikvm(277): "Signal Catcher" daemon prio=5 tid=7 VMWAIT 12-20 10:02:55.141: INFO/dalvikvm(277): | group="system" sCount=1 dsCount=0 s=N obj=0x44d9b1e8 self=0x145108 12-20 10:02:55.141: INFO/dalvikvm(277): | sysTid=279 nice=0 sched=0/0 cgrp=default handle=1262808 12-20 10:02:55.141: INFO/dalvikvm(277): at dalvik.system.NativeStart.run(Native Method) 12-20 10:02:55.151: INFO/dalvikvm(277): "HeapWorker" daemon prio=5 tid=5 WAIT 12-20 10:02:55.151: INFO/dalvikvm(277): | group="system" sCount=1 dsCount=0 s=N obj=0x4369a188 self=0x1343c0 12-20 10:02:55.151: INFO/dalvikvm(277): | sysTid=278 nice=0 sched=0/0 cgrp=default handle=1208016 12-20 10:02:55.151: INFO/dalvikvm(277): at java.lang.Object.wait(Native Method) 12-20 10:02:55.151: INFO/dalvikvm(277): - waiting on <0x3362f0> (a java.lang.VMThread) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.lang.Thread.parkFor(Thread.java:1535) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48) 12-20 10:02:55.151: INFO/dalvikvm(277): at sun.misc.Unsafe.park(Unsafe.java:317) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.util.concurrent.locks.LockSupport.park(LockSupport.java:131) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:790) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:823) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1153) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:200) 12-20 10:02:55.151: INFO/dalvikvm(277): at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:261) 12-20 10:02:55.151: INFO/dalvikvm(277): at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:305) 12-20 10:02:55.151: INFO/dalvikvm(277): at android.database.sqlite.SQLiteProgram.close(SQLiteProgram.java:219) 12-20 10:02:55.151: INFO/dalvikvm(277): at android.database.sqlite.SQLiteQuery.close(SQLiteQuery.java:141) 12-20 10:02:55.151: INFO/dalvikvm(277): at android.database.sqlite.SQLiteCursor.close(SQLiteCursor.java:507) 12-20 10:02:55.151: INFO/dalvikvm(277): at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:586) 12-20 10:02:55.151: INFO/dalvikvm(277): at dalvik.system.NativeStart.run(Native Method) 12-20 10:02:55.151: ERROR/dalvikvm(277): VM aborting 12-20 10:02:55.296: INFO/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 12-20 10:02:55.296: INFO/DEBUG(28): signal 11 (SIGSEGV), fault addr deadd00d 12-20 10:02:55.296: INFO/DEBUG(28): r0 00000354 r1 afe1331d r2 0000000c r3 deadd00d 12-20 10:02:55.296: INFO/DEBUG(28): r4 00000026 r5 400091e8 r6 ad065714 r7 003fca30 12-20 10:02:55.296: INFO/DEBUG(28): r8 00000344 r9 00000001 10 ad080c00 fp 00000000 12-20 10:02:55.296: INFO/DEBUG(28): ip ad080160 sp 46a32c58 lr afe142dd pc ad035452 cpsr 20000030 12-20 10:02:55.391: INFO/DEBUG(28): #00 pc 00035452 /system/lib/libdvm.so 12-20 10:02:55.391: INFO/DEBUG(28): #01 pc 000440d8 /system/lib/libdvm.so 12-20 10:02:55.391: INFO/DEBUG(28): #02 pc 0001680c /system/lib/libdvm.so 12-20 10:02:55.391: INFO/DEBUG(28): #03 pc 000170c4 /system/lib/libdvm.so 12-20 10:02:55.391: INFO/DEBUG(28): #04 pc 0001724c /system/lib/libdvm.so 12-20 10:02:55.401: INFO/DEBUG(28): #05 pc 00055b52 /system/lib/libdvm.so 12-20 10:02:55.401: INFO/DEBUG(28): #06 pc 00055c80 /system/lib/libdvm.so 12-20 10:02:55.401: INFO/DEBUG(28): #07 pc 00055d80 /system/lib/libdvm.so 12-20 10:02:55.401: INFO/DEBUG(28): #08 pc 0001353c /system/lib/libdvm.so 12-20 10:02:55.411: INFO/DEBUG(28): #09 pc 00019888 /system/lib/libdvm.so 12-20 10:02:55.411: INFO/DEBUG(28): #10 pc 00018d5c /system/lib/libdvm.so 12-20 10:02:55.411: INFO/DEBUG(28): #11 pc 0004d6d0 /system/lib/libdvm.so 12-20 10:02:55.411: INFO/DEBUG(28): #12 pc 0004d702 /system/lib/libdvm.so 12-20 10:02:55.411: INFO/DEBUG(28): #13 pc 00041c78 /system/lib/libdvm.so 12-20 10:02:55.411: INFO/DEBUG(28): #14 pc 00010000 /system/lib/libc.so 12-20 10:02:55.411: INFO/DEBUG(28): #15 pc 0000fad4 /system/lib/libc.so 12-20 10:02:55.411: INFO/DEBUG(28): code around pc: 12-20 10:02:55.411: INFO/DEBUG(28): ad035440 4808ecb6 6b9b5823 d0002b00 4b064798 12-20 10:02:55.411: INFO/DEBUG(28): ad035450 701c2426 ed28f7d9 0004ab1c fffe57c4 12-20 10:02:55.411: INFO/DEBUG(28): ad035460 fffe8c30 00000354 deadd00d b510b40e 12-20 10:02:55.411: INFO/DEBUG(28): code around lr: 12-20 10:02:55.422: INFO/DEBUG(28): afe142cc 220ce008 2b005eab 1c28d003 47889901 12-20 10:02:55.422: INFO/DEBUG(28): afe142dc 35544306 d5f43f01 2c006824 b003d1ee 12-20 10:02:55.422: INFO/DEBUG(28): afe142ec bdf01c30 00024b44 000000b4 1c0fb5f0 12-20 10:02:55.422: INFO/DEBUG(28): stack: 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c18 00000015 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c1c afe1334d /system/lib/libc.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c20 afe3902c /system/lib/libc.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c24 afe38fd8 /system/lib/libc.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c28 00000000 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c2c afe142dd /system/lib/libc.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c30 46a32c44 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c34 afe1331d /system/lib/libc.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c38 ad065714 /system/lib/libdvm.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c3c ad07ff50 /system/lib/libdvm.so 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c40 400091e8 /dev/ashmem/mspace/dalvik-heap/zygote/0 (deleted) 12-20 10:02:55.422: INFO/DEBUG(28): 46a32c44 ad065714 /system/lib/libdvm.so 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c48 003fca30 [heap] 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c4c afe1337f /system/lib/libc.so 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c50 df002777 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c54 e3a070ad 12-20 10:02:55.431: INFO/DEBUG(28): #00 46a32c58 ad06ccd7 /system/lib/libdvm.so 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c5c ad0440dd /system/lib/libdvm.so 12-20 10:02:55.431: INFO/DEBUG(28): #01 46a32c60 000027d2 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c64 00000000 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c68 42a58733 /data/dalvik-cache/ system@framework @ framework.jar@classes.dex 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c6c 42ad950b /data/dalvik-cache/ system@framework @ framework.jar@classes.dex 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c70 003fca30 [heap] 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c74 0000011b 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c78 ad080f8c /system/lib/libdvm.so 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c7c afe0f3b0 /system/lib/libc.so 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c80 009b8cc3 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c84 00000000 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c88 00000354 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c8c 400091e8 /dev/ashmem/mspace/dalvik-heap/zygote/0 (deleted) 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c90 ad07ff50 /system/lib/libdvm.so 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c94 00000354 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c98 0000000a 12-20 10:02:55.431: INFO/DEBUG(28): 46a32c9c ad016810 /system/lib/libdvm.so 
+6
source share
3 answers

I found a solution to my problem. I use a transaction, analyzing the data and inserting the data into the database. But between them I am trying to get some values ​​from the database. So the hierarchy as shown below

 <transaction> <Insert> <select> <insert> </transaction> 

I am trying to run a select query in a database and the database in a transaction. Actually there is a solution here about concurrent transaction

The SQL command "BEGIN TRANSACTION" (the "BEGIN TRANSACTION" keyword is optional) is used to bring SQLite out of autosave mode. Note that the BEGIN command does not receive locks in the database. After the BEGIN command, a SHARED lock will be obtained when the first SELECT statement is executed. A RESERVED lock will be obtained upon execution of the first INSERT , UPDATE, or DELETE . The EXCLUSIVE lock is not retained until the memory cache is full and spilled to disk or until the transaction completes. Thus, the system delays the blocking of access for reading to the file file until the last moment.

I just deleted the query request lines from the code while the database is in a transaction


Edit

There is also one more solution: check enable false, for example

 mDb.setLockingEnabled(false); 
+6
source

The problem is that the finalizer has been stuck for so long.

If you can eliminate the finalizer, the problem is resolved. If you cannot, you need to eliminate the interdependence between the finalizer and the slow thread.

VM suggests that finalizers finish quickly, and anything that takes a really long time is probably at a standstill.

Instead of waiting for the virtual machine to end due to lack of resources and crashing, it will immediately inform you of the problem and then get stuck in your head to make sure you noticed. #copied from here

+4
source

In my particular case, this problem disappeared after calling Cursor.close() after completing each cursor instance in my code.

0
source

Source: https://habr.com/ru/post/904132/


All Articles