Kostya, is there any chance of sending me your small test? I'm hoping I can 
try compare that with my code and make some progress, or at least help me 
get together a small example for Dianne. If you do, could you send it to 
andrew at rageconsulting dot com
Andrew
 

On Sunday, July 22, 2012 1:05:48 PM UTC+1, Kostya Vasilyev wrote:

>
> 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

Reply via email to