2012/7/22 Andy dev <andrewpmo...@gmail.com> > > Kostya, after tracking mine down more, it seems to be exactly the same. > It doesn't actually get killed until I get a broadcast. I'm not sending > them I'm receiving them from things like the SMS service, the battery level > the screen state etc, but any of those I've registered for cause the issue. >
Well, my code sends broadcasts between the app's components, which is very nearly synchronous, so I could not tell the difference. I actually created and ran a small test, and can confirm this behavior with 100% certainty. -- K > I'm not exactly sure which transaction is even going on at this point. > > Dianne, thanks for your reply I really appriciate it, especially given > your position in the android team. I'll try and work on cutting down my > code into a manageable example as it's several hundred classes at the > moment (it's the app Light Flow in the market). I do hold quite a bit in > static variables, does any of that make a difference in this situation? > > On Sunday, July 22, 2012 11:14:16 AM UTC+1, Kostya Vasilyev wrote: > >> I'm also seeing my application get killed even while it has a foreground >> service. >> >> It appears to happen on the next sendBroadcast() - which is an >> implementation detail of how some of my components interact, and has >> nothing to do with the service's startForeground() state. The service >> remains in foreground state at this point (and is supposed to last about a >> dozen seconds more). >> >> Instead, the process gets killed, and I'm also seeing an >> android.os.**TransactionTooLargeException >> in the logcat. >> >> The exception looks to me like an unfortunate and unexpected side effect >> of the process getting killed. >> >> The broadcast in question is sent farly often, its data payload is only a >> few dozen bytes, and so it never triggers this exception under normal >> circumstances. >> >> -- K >> >> 2012/7/22 Dianne Hackborn <hack...@android.com> >> >>> TransactionTooLarge means that the data being sent through the IPC call >>> is too large. >>> >>> I just checked my test case and verified that this doesn't kill the >>> service's process *if* it is in the foreground (with >>> Service.startForeground()). I'm not sure what may be different in your >>> situation... one thing to keep in mind is that when the user removes a >>> task, and it is not safe to kill a process associated with it, then that >>> process is marked as having a pending kill, and as soon as it becomes safe >>> it will be killed. So for example at whatever point after that you are no >>> longer foreground, your process will be killed. >>> >>> There was a change in JB to make this interaction better about finding >>> processes associated with the app and killing them. If your service isn't >>> running in the main process of the app, its process should always be killed >>> now, where before it may not have been. >>> >>> However in all cases it is only killed if it is safe to do so -- that is >>> if the process is at an oom_adj level that is safe to kill by the OOM >>> killer. Just running a background service means it is safe to kill; the >>> service itself will be restarted if you have indicated this is what you >>> want. This is not a new situation that your app needs to deal with -- its >>> process could always have been killed while in this state if memory was >>> needed elsewhere (for example if the user launches a game that uses a lot >>> of RAM). >>> >>> Back to the exception you mention, I wouldn't like to see this in the >>> logs... if you can give me steps to reproduce it, it is something I would >>> like to investigate. >>> >>> That said, your initial description is not actually a system problem as >>> you describe it -- yes your process gets killed, but this is a normal part >>> of operation you should be dealing with, and if you can't recover when it >>> is restarted then that is something that needs to be fixed in the app. >>> >>> On Sat, Jul 21, 2012 at 4:01 PM, Andy dev <andrewpmo...@gmail.com>wrote: >>> >>>> Ok, I've found out a little more information. It seems that the crash >>>> doesn't happen when the task is swiped away, it's when one of the broadcast >>>> receivers tries to fire after the app has been swiped away. It works find >>>> beforehand, but it's cleared from the task list I'm also seeing this in the >>>> logs: >>>> >>>> >>>> 07-21 23:57:40.286: E/JavaBinder(309): !!! FAILED BINDER TRANSACTION !!! >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): Exception when sending >>>> broadcast to ComponentInfo{com.example.**android.app/com.example.** >>>> android.app.receiver.**SmsReceiver} >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): android.os.** >>>> TransactionTooLargeException >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at android.os.BinderProxy.* >>>> *transact(Native Method) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at android.app.** >>>> ApplicationThreadProxy.**scheduleReceiver(** >>>> ApplicationThreadNative.java:**767) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at com.android.server.am.** >>>> BroadcastQueue.**processCurBroadcastLocked(**BroadcastQueue.java:220) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at com.android.server.am.** >>>> BroadcastQueue.**processNextBroadcast(**BroadcastQueue.java:750) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at com.android.server.am.** >>>> ActivityManagerService.**finishReceiver(**ActivityManagerService.java:* >>>> *13281) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at android.app.** >>>> ActivityManagerNative.**onTransact(**ActivityManagerNative.java:**346) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at com.android.server.am.** >>>> ActivityManagerService.**onTransact(**ActivityManagerService.java:** >>>> 1611) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at android.os.Binder.** >>>> execTransact(Binder.java:367) >>>> 07-21 23:57:40.286: W/BroadcastQueue(309): at >>>> dalvik.system.NativeStart.run(**Native Method) >>>> 07-21 23:57:40.286: W/ActivityManager(309): Scheduling restart of >>>> crashed service com.example.android.app/.**service.MainRunningService >>>> in 5000ms >>>> >>>> To be honest, I've tried to read about the >>>> TransactionTooLargeException, but I don't feel any wiser! >>>> >>>> >>>> >>>> On Friday, July 20, 2012 11:23:11 PM UTC+1, Andy dev wrote: >>>> >>>>> Thanks. I'll keep looking for a solution then! >>>>> >>>>> >>>>> On Friday, July 20, 2012 11:04:13 PM UTC+1, Kostya Vasilyev wrote: >>>>> >>>>>> Yep, I can confirm this with my own foreground service on 4.1.1 >>>>>> (Galaxy Nexus). >>>>>> >>>>>> -- K >>>>>> >>>>>> 2012/7/21 Andy dev <andrewpmo...@gmail.com> >>>>>> >>>>>>> Anyone at least confirm what I'm doing looks ok - even if you don't >>>>>>> know the reason why. Just as a sanity check? >>>>>>> >>>>>>> On Thursday, July 19, 2012 10:19:22 PM UTC+1, Andy dev wrote: >>>>>>> >>>>>>>> I've got a service running (an accessibility service called >>>>>>>> MainRunningService) and also use an alarmmanager within my app. >>>>>>>> >>>>>>>> On ICS when a user pulled up the task list and swiped the app away >>>>>>>> the service kept running, but the user interface was cleared from the >>>>>>>> stack. >>>>>>>> >>>>>>>> On jelly bean I'm finding this to be a little different. It seems >>>>>>>> like it kills off the service and then restarts it even if I've got an >>>>>>>> icon >>>>>>>> in the notification bar and I've got the app set to run in the >>>>>>>> foreground. >>>>>>>> This is killing off all my current app state and causing it to stop >>>>>>>> working. >>>>>>>> >>>>>>>> I'm seeing this in the logs >>>>>>>> >>>>>>>> 07-19 21:47:42.213: I/ActivityManager(307): Killing >>>>>>>> 834:com.example.android.**appnam****e/u0a72: remove task >>>>>>>> 07-19 21:47:42.236: W/AudioService(307): AudioFocus audio focus >>>>>>>> client died >>>>>>>> 07-19 21:47:42.236: I/AudioService(307): AudioFocus >>>>>>>> abandonAudioFocus(): removing entry for android.media.AudioManager@ >>>>>>>> **41a****42020com.example.android.**appna****me.service.** >>>>>>>> MainRunningService$****1@41963ec0<android.media.AudioManager@41a42020com.example.android.appname.service.MainRunningService$1@41963ec0> >>>>>>>> 07-19 21:47:42.244: W/ActivityManager(307): Scheduling restart of >>>>>>>> crashed service com.rageconsulting.android.**app****name/.service.* >>>>>>>> *MainRunningServi****ce in 5000ms >>>>>>>> >>>>>>>> For the persistent Icon I'm doing the following: >>>>>>>> Notification foregroundNotification; >>>>>>>> foregroundNotification = new >>>>>>>> Notification(R.drawable.iconx,******"Example >>>>>>>> starting notification",System.**currentTi****meMillis()); >>>>>>>> Intent i=new Intent(this, MainUIActivity.class); >>>>>>>> i.setFlags(Intent.FLAG_**ACTIVIT****Y_CLEAR_TOP|Intent.**FLAG_** >>>>>>>> ACTIVI**TY_SINGLE_TOP); >>>>>>>> foregroundNotification.flags|=******Notification.FLAG_NO_CLEAR; >>>>>>>> startForeground(9642, foregroundNotification); >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Is there something I'm doing wrong? I've never had a problem in the >>>>>>>> past with this code, but it's not very good on jelly bean. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Android Developers" group. >>>>>>> To post to this group, send email to android-developers@** >>>>>>> googlegroup**s.com <android-developers@googlegroups.com> >>>>>>> To unsubscribe from this group, send email to >>>>>>> android-developers+**unsubscribe**@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/**group**/android-developers?hl=en<http://groups.google.com/group/android-developers?hl=en> >>>>>>> >>>>>> >>>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Android Developers" group. >>>> To post to this group, send email to android-developers@** >>>> googlegroups.com <android-developers@googlegroups.com> >>>> To unsubscribe from this group, send email to >>>> android-developers+**unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> >>>> For more options, visit this group at >>>> http://groups.google.com/**group/android-developers?hl=en<http://groups.google.com/group/android-developers?hl=en> >>>> >>> >>> >>> >>> -- >>> Dianne Hackborn >>> Android framework engineer >>> hack...@android.com >>> >>> Note: please don't send private questions to me, as I don't have time to >>> provide private support, and so won't reply to such e-mails. All such >>> questions should be posted on public forums, where I and others can see and >>> answer them. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Android Developers" group. >>> To post to this group, send email to android-developers@** >>> googlegroups.com <android-developers@googlegroups.com> >>> To unsubscribe from this group, send email to >>> android-developers+**unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> >>> For more options, visit this group at >>> http://groups.google.com/**group/android-developers?hl=en<http://groups.google.com/group/android-developers?hl=en> >>> >> >> -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en