Async task freeze on Android
I have weird problem with my Activity and I dont know what to do...
private Bitmap mBitmap;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mBitmap = initBitmap();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuItemNew:
doSomething();
return true;
case R.id.menuItemNative:
showList();
return true;
}
return(super.onOptionsItemSelected(item));
}
private boolean selected;
private void showList() {
CharSequence[] items = {"First", "Second"};
selected = false;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Selection mode");
builder.setSingleChoiceItems(items, 0, new OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
selected = item == 1;
}
});
builder.setPositiveButton("OK", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (selected) {
new NativeTask().execute();
}
}
});
Dialog dia = builder.create();
dia.show();
}
private class NativeTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
Log.i("task", "before Native Call");
int buffer[] = new int[mBitmap.getWidth() * mBitmap.getHeight()];
mBitmap.getPixels(buffer, 0, mBitmap.getWidth(), 0, 0, mBitmap.getWidth(), mBitmap.getHeight());
int[] result = NativeLibrary.process(pixels);
Log.i("task", "after Native Call");
return null;
}
@Override
protected void onProgressUpdate(String... progress) {
Log.i("task", "in progress");
}
@Override
protected void onPostExecute(String a) {
Log.i("task", "in postExecute");
}
}
This is relevant part of my Activity. As you see, I have menu there and if you click on second item, dialog with list of 2 items appears. Then if you select and confirm second item in list, AsyncTask is being executed and some method from native code is called.
Looks good (for me), but some problem is there - when I select second item from list, native method is correctly called... but Activity freezes.
Log contains all three messages:
- task: before Native call
- task: after Native call
- task: in postExecute
I don't know what more I have to do. Am I missing something? Why is my Activity freezing when I use AsyncTask? Is problem I'm working with Bitmap inside AsyncTask? NativeLibrary.process(int[]) return correct array, no problem there.... so WHY?
I will be happy for any tip!
P.S: I'm sorry for my bad english
EDIT: Here's log for freeze
05-17 01:44:53.831: INFO/task(27629): after Natvive Call
05-17 01:44:53.831: INFO/task(27629): in postExecute
05-17 01:44:56.391: DEBUG/dalvikvm(24817): GC_EXPLICIT freed 7 objects / 280 bytes in 67ms
05-17 01:45:05.991: DEBUG/dalvikvm(16702): GC_EXPLICIT freed 103 objects / 3760 bytes in 669ms
05-17 01:45:24.011: DEBUG/dalvikvm(16635): GC_EXPLICIT freed 7 objects / 280 bytes in 690ms
05-17 01:45:27.181: WARN/WindowManager(96): Key dispatching timed out sending to my.test.application/my.test.application.NativeActivity
05-17 01:45:27.181: WARN/WindowManager(96): Previous dispatch state: {{KeyEvent{action=0 code=82 repeat=0 meta=0 scancode=139 mFlags=8} to Window{46518640 my.test.application/my.test.application.NativeActivity paused=false} @ 1305589511983 lw=Window{46518640 my.test.application/my.test.application.NativeActivity paused=false} lb=android.os.BinderProxy@46426770 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{46518640 my.test.application/my.test.application.NativeActivity paused=false}}}
05-17 01:45:27.181: WARN/WindowManager(96): Current dispatch state: {{KeyEvent{action=1 code=82 repeat=0 meta=0 scancode=139 mFlags=8} to Window{46518640 my.test.application/my.test.application.NativeActivity paused=false} @ 1305589527184 lw=Window{46518640 my.test.application/my.test.application.NativeActivity paused=false} lb=android.os.BinderProxy@46426770 fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{46518640 my.test.application/my.test.application.NativeActivity paused=false}}}
05-17 01:45:27.181: WARN/WindowManager(96): waitedFor: 15000, keyDispatchingTimeout: 15000
05-17 01:45:27.221: ERROR/ActivityManager(96): ANR in my.test.application (my.test.application/.NativeActivity)
05-17 01:45:27.221: ERROR/ActivityManager(96): Reason: keyDispatchingTimedOut
05-17 01:45:27.221: ERROR/ActivityManager(96): Load: 1.73 / 1.48 / 1.71
05-17 01:45:27.221: ERROR/ActivityManager(96): CPU usage from 682640ms to 23ms ago:
05-17 01:45:27.221: ERROR/ActivityManager(96): system_server: 2% = 1% user + 0% kernel / faults: 14389 minor 3 major
05-17 01:45:27.221: ERROR/ActivityManager(96): com.htc.album: 1% = 1% user + 0% kernel / faults: 23991 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): logcat: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): akmd: 0% = 0% user + 0% kernel / faults: 828 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): debuggerd: 0% = 0% user + 0% kernel / faults: 49 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): d.process.acore: 0% = 0% user + 0% kernel / faults: 1272 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): gets.SenseClock: 0% = 0% user + 0% kernel / faults: 1212 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): d.process.media: 0% = 0% user + 0% kernel / faults: 285 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): rmClockPlusDock: 0% = 0% user + 0% kernel / faults: 298 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): m.android.phone: 0% = 0% user + 0% kernel / faults: 36 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): harrison.agenda: 0% = 0% user + 0% kernel / faults: 264 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): adbd: 0% = 0% user + 0% kernel / faults: 57 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): LocationService: 0% = 0% user + 0% kernel / faults: 169 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): e.process.gapps: 0% = 0% user + 0% kernel / faults: 225 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): mpz.audioplayer: 0% = 0% user + 0% kernel / faults: 130 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): com.htc.bg: 0% = 0% user + 0% kernel / faults: 91 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): panel_on/0: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): w1_bus_master1: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): zygote: 0% = 0% user + 0% kernel / faults: 342 minor
05-17 01:45:27.221: ERROR/ActivityManag开发者_StackOverflow社区er(96): .android.htcime: 0% = 0% user + 0% kernel / faults: 118 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): synaptics_wq: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): events/0: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): suspend: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): ds2784-battery.: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): rild: 0% = 0% user + 0% kernel / faults: 2 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): ancedtaskkiller: 0% = 0% user + 0% kernel / faults: 36 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): ny.lindamanager: 0% = 0% user + 0% kernel / faults: 17 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): com.htc.bgp: 0% = 0% user + 0% kernel / faults: 32 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): ksoftirqd/0: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): ish.batterylife: 0% = 0% user + 0% kernel / faults: 26 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): com.android.mms: 0% = 0% user + 0% kernel / faults: 16 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): d.process.acore: 0% = 0% user + 0% kernel / faults: 17 minor
05-17 01:45:27.221: ERROR/ActivityManager(96): +ik.application: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): +flush-31:0: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): +ik.application: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): -flush-179:0: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): -flush-7:8: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): -flush-31:0: 0% = 0% user + 0% kernel
05-17 01:45:27.221: ERROR/ActivityManager(96): TOTAL: 23% = 20% user + 2% kernel + 0% irq
05-17 01:45:27.491: INFO/Process(96): Sending signal. PID: 27629 SIG: 3
05-17 01:45:27.491: INFO/dalvikvm(27629): threadid=3: reacting to signal 3
05-17 01:45:27.691: INFO/Process(96): Sending signal. PID: 96 SIG: 3
05-17 01:45:27.691: INFO/dalvikvm(96): threadid=3: reacting to signal 3
And sometimes I get this:
05-17 01:36:59.841: INFO/task(27583): after NativeCall
05-17 01:36:59.841: INFO/task(27583): in postExecute
05-17 01:36:59.953: INFO/DEBUG(11783): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-17 01:36:59.953: INFO/DEBUG(11783): Build fingerprint: 'htc_wwe/htc_bravo/bravo/bravo:2.2/FRF91/293415:user/release-keys'
05-17 01:36:59.953: INFO/DEBUG(11783): pid: 27583, tid: 27583 >>> my.test.application <<<
05-17 01:36:59.953: INFO/DEBUG(11783): signal 11 (SIGSEGV), fault addr ffdbb660
05-17 01:36:59.953: INFO/DEBUG(11783): r0 00000310 r1 002db970 r2 002db660 r3 afd42328
05-17 01:36:59.953: INFO/DEBUG(11783): r4 1ff5bf9e r5 afd4372c r6 0000181f r7 ffadfcf1
05-17 01:36:59.953: INFO/DEBUG(11783): r8 bebb3470 r9 41873c1c 10 41873c04 fp bebb37b8
05-17 01:36:59.953: INFO/DEBUG(11783): ip ffadfcf0 sp bebb33b8 lr afd0c6b5 pc afd0c192 cpsr 20000030
05-17 01:36:59.953: INFO/DEBUG(11783): d0 6472656767756265 d1 6f6e5f746e65696e
05-17 01:36:59.953: INFO/DEBUG(11783): d2 7379732f3a70692e d3 6d6172662f6d6578
05-17 01:36:59.953: INFO/DEBUG(11783): d4 72662f6b726f7765 d5 2d6b726f77656d61
05-17 01:36:59.953: INFO/DEBUG(11783): d6 3a6b70612e736572 d7 0000000100000000
05-17 01:36:59.953: INFO/DEBUG(11783): d8 000000004635d958 d9 4385800000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d10 00000000437d0000 d11 0000000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d12 0000000000000000 d13 0000000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d14 0000000000000000 d15 0000000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d16 0000000b0000000a d17 c070100000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d18 4035000000000000 d19 0000000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d20 3ff0000000000000 d21 8000000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d22 c035000000000000 d23 ff00080008000700
05-17 01:36:59.953: INFO/DEBUG(11783): d24 ff00080008000700 d25 ff00080008000700
05-17 01:36:59.953: INFO/DEBUG(11783): d26 0100010001000100 d27 0100010001000100
05-17 01:36:59.953: INFO/DEBUG(11783): d28 0100010001000100 d29 3ff0000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): d30 0000000000000000 d31 3ff0000000000000
05-17 01:36:59.953: INFO/DEBUG(11783): scr 60000012
05-17 01:37:00.031: INFO/DEBUG(11783): #00 pc 0000c192 /system/lib/libc.so
05-17 01:37:00.061: INFO/DEBUG(11783): #01 pc 0000c6b0 /system/lib/libc.so
05-17 01:37:00.061: INFO/DEBUG(11783): #02 pc 0000cd9e /system/lib/libc.so
05-17 01:37:00.071: INFO/DEBUG(11783): #03 pc 00019732 /system/lib/libutils.so
05-17 01:37:00.071: INFO/DEBUG(11783): #04 pc 00048c9a /system/lib/libandroid_runtime.so
05-17 01:37:00.071: INFO/DEBUG(11783): #05 pc 00017034 /system/lib/libdvm.so
05-17 01:37:00.071: INFO/DEBUG(11783): #06 pc 00045784 /system/lib/libdvm.so
05-17 01:37:00.071: INFO/DEBUG(11783): #07 pc 0001bfa0 /system/lib/libdvm.so
05-17 01:37:00.071: INFO/DEBUG(11783): #08 pc 00022c04 /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #09 pc 00021aa0 /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #10 pc 0005d162 /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #11 pc 000659ec /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #12 pc 0001bfa0 /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #13 pc 00022c04 /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #14 pc 00021aa0 /system/lib/libdvm.so
05-17 01:37:00.081: INFO/DEBUG(11783): #15 pc 0005cfa0 /system/lib/libdvm.so
05-17 01:37:00.091: INFO/DEBUG(11783): #16 pc 000480fe /system/lib/libdvm.so
05-17 01:37:00.091: INFO/DEBUG(11783): #17 pc 0002ffbc /system/lib/libandroid_runtime.so
05-17 01:37:00.091: INFO/DEBUG(11783): #18 pc 000310b8 /system/lib/libandroid_runtime.so
05-17 01:37:00.091: INFO/DEBUG(11783): #19 pc 00008ca8 /system/bin/app_process
05-17 01:37:00.091: INFO/DEBUG(11783): #20 pc 0000d430 /system/lib/libc.so
05-17 01:37:00.091: INFO/DEBUG(11783): code around pc:
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c170 c004f8c2 f0436843 f8c00c01 e09ec004
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c180 0403f040 ea4f6054 f04c04dc 2c1f0701
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c190 f841604f d81dc00c c138f8df 070ceb03
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c1a0 0624f107 500cf853 00c4eb06 fa162601
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c1b0 422cf404 432cd104 400cf843 e0044603
05-17 01:37:00.091: INFO/DEBUG(11783): code around lr:
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c694 0f41f115 f04fbf88 d80c35ff 350b4927
05-17 01:37:00.091: INFO/DEBUG(11783): afd0c6a4 0507f025 68431860 4628b12b fc1cf7ff
05-17 01:37:00.101: INFO/DEBUG(11783): afd0c6b4 28004606 4e21d132 689119a2 d819428d
05-17 01:37:00.101: INFO/DEBUG(11783): afd0c6c4 69561b4b d9082b0f 60931970 0c01f043
05-17 01:37:00.101: INFO/DEBUG(11783): afd0c6d4 f8c06150 50c3c004 2300e017 61536093
05-17 01:37:00.101: INFO/DEBUG(11783): stack:
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3378 afd4372c /system/lib/libc.so
05-17 01:37:00.101: INFO/DEBUG(11783): bebb337c 00000000
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3380 00357588 [heap]
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3384 0000a000 [heap]
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3388 bebb3470 [stack]
05-17 01:37:00.101: INFO/DEBUG(11783): bebb338c 41873c1c
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3390 41873c04
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3394 afd0be7d /system/lib/libc.so
05-17 01:37:00.101: INFO/DEBUG(11783): bebb3398 00000000
05-17 01:37:00.101: INFO/DEBUG(11783): bebb339c 00000000
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33a0 00001404
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33a4 bebb33e8 [stack]
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33a8 fffffff1
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33ac bebb33e8 [stack]
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33b0 df002777
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33b4 e3a070ad
05-17 01:37:00.111: INFO/DEBUG(11783): #00 bebb33b8 00000308
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33bc afd42328 /system/lib/libc.so
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33c0 afd438e4 /system/lib/libc.so
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33c4 afd1040c /system/lib/libc.so
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33c8 00000003
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33cc afd43860 /system/lib/libc.so
05-17 01:37:00.111: INFO/DEBUG(11783): bebb33d0 00000003
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33d4 afd42328 /system/lib/libc.so
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33d8 00000310
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33dc 00000003
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33e0 00000308
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33e4 afd0c6b5 /system/lib/libc.so
05-17 01:37:00.121: INFO/DEBUG(11783): #01 bebb33e8 432c3dd3 /system/framework/framework-res.apk
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33ec 00000000
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33f0 00000187
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33f4 00298c90 [heap]
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33f8 00000000
05-17 01:37:00.121: INFO/DEBUG(11783): bebb33fc 00000308
05-17 01:37:00.121: INFO/DEBUG(11783): bebb3400 00000000
05-17 01:37:00.121: INFO/DEBUG(11783): bebb3404 00236320 [heap]
05-17 01:37:00.121: INFO/DEBUG(11783): bebb3408 00298988 [heap]
05-17 01:37:00.131: INFO/DEBUG(11783): bebb340c a8126a18 /system/lib/libutils.so
05-17 01:37:00.131: INFO/DEBUG(11783): bebb3410 00000308
05-17 01:37:00.131: INFO/DEBUG(11783): bebb3414 afd0cda1 /system/lib/libc.so
05-17 01:37:00.861: INFO/ActivityManager(96): Process my.test.application (pid 27583) has died.
in this second case it doesnt freese but Activity crashes...
EDIT: I found weird memory leak in Native part and when I fixed it, everything is ok :)
I am confused as the declaration of NativeTask declares that it takes a Parameter(s) of type String as in:
new NativeTask().execute(string1);
not
new NativeTask().execute();
also you do not seem to use the string parameter in doInBackground as:
String inString= params[0];
Hope that helps, JAL
I found some memory leak in native part. When I fixed it, everything works correct.
精彩评论