multithreading - Android device behaves differently when plugged in USB vs not plugged in -
i running tests on htc magic (dev phone 2). have 3 background asynctasks. 1 downloads data server, 1 wakes screen once minute , last keeps application alive given duration. download thread asynctask seems work correctly, , while downloading(~1hr) other 2 seem work well. once downloads done if phone unplugged other 2 threads don't work properly(screen doesn't wake , keepalive never ends). seems stop altogether, if plug phone computer start again... not sure causing this, screen wakeup should preventing device going sleep.
all code can found here: https://homepage.usask.ca/~mcb394/receive.java or 2 classes seem stop working after download completes , when unplugged below. thoughts awesome.
/** * class keeps phone alive entire duration necessary use data (think of media player buffer) * @author michael bullock */ private class keeprunning extends asynctask<void, void, void> { @override protected void doinbackground(void... arg0) { try { thread.sleep(alive_time_ms); } catch (interruptedexception e) { out.print(" keeprunning crashed!!!!!\n"); out.flush(); e.printstacktrace(); } out.print(" keeprunning completed\n"); out.flush(); timecompleted = true; return null; } } /** * class powers phone's screen every wakeup_every ms, stays awake 1s * phone avoids going sleep * @author michael bullock */ private class wakeup extends asynctask<void, void, void> { @override protected void doinbackground(void... arg0) { powermanager pm = (powermanager) getsystemservice(context.power_service); powermanager.wakelock wl = pm.newwakelock(powermanager.screen_bright_wake_lock | powermanager.acquire_causes_wakeup, getclass().getname()); do{ try { thread.sleep(wakeup_every); } catch (interruptedexception e) { e.printstacktrace(); } wl.acquire(); log.i("", "********** acquired wakelock **********"); try { thread.sleep(1000); } catch (interruptedexception e) { e.printstacktrace(); } log.i("", "********** releasing wakelock **********"); wl.release(); }while(!timecompleted || !transfercompleted); out.print(" wakeup completed\n"); out.flush(); return null; } }
the service or activity running asynctask
may getting killed, might affected being on battery power. try using service , using service.startforeground
.
Comments
Post a Comment