cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas K. (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (CB-11513) iOS memory warning stops sound, but does not send status to JS-client
Date Thu, 30 Jun 2016 11:38:10 GMT

    [ https://issues.apache.org/jira/browse/CB-11513?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15356934#comment-15356934
] 

Thomas K. edited comment on CB-11513 at 6/30/16 11:38 AM:
----------------------------------------------------------

(void)onMemoryWarning
{
    NSMutableArray* keysToRemove = [[NSMutableArray alloc] init];
    
    for(id key in [self soundCache]) {
        CDVAudioFile* audioFile = [[self soundCache] objectForKey:key];
        if (audioFile != nil) {
            if (audioFile.player != nil && ![audioFile.player isPlaying]) {  // skip
playing sounds
                [keysToRemove addObject:key];
            }
            if (audioFile.recorder != nil && ![audioFile.recorder isRecording]) {
// skip recording sounds
                [keysToRemove addObject:key];
            }
        }
    }
    
    [[self soundCache] removeObjectsForKeys:keysToRemove];
    
    [self setAvSession:nil];

    [super onMemoryWarning];
}



was (Author: katzlbt):
(void)onMemoryWarning
{
    NSMutableArray* keysToRemove = [[NSMutableArray alloc] init];
    
    for(id key in [self soundCache]) {
        CDVAudioFile* audioFile = [[self soundCache] objectForKey:key];
        if (audioFile != nil) {
            if (audioFile.player != nil && ![audioFile.player isPlaying]) {
                [keysToRemove addObject:key];
            }
            if (audioFile.recorder != nil && ![audioFile.recorder isRecording]) {
                [keysToRemove addObject:key];
            }
        }
    }
    
    [[self soundCache] removeObjectsForKeys:keysToRemove];
    
    [self setAvSession:nil];

    [super onMemoryWarning];
}


> iOS memory warning stops sound, but does not send status to JS-client
> ---------------------------------------------------------------------
>
>                 Key: CB-11513
>                 URL: https://issues.apache.org/jira/browse/CB-11513
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin Media
>    Affects Versions: 3.6.3, 4.1.3, 6.1.0
>         Environment: iOS 9.3 iPhone 6
>            Reporter: Thomas K.
>
> If iOS issues a memory warning while playing a sound, all sounds are terminated. However
the ios/CDVSound.m plugin does not update the state of its JS-clients, so the last state the
Client knows is Media.MEDIA_RUNNING, which is untrue after a memory warning. This results
in incorrect clientside status.
> Problem: A user's software component may send pause() instead of play() (toggle button)
effectively rendering the sound unplayable without recovery. This happened in our case.
> Fix: Send a correct message to update the status at the JS-client to Media.MEDIA_STOPPED
or do not discard currently playing sounds.
> https://github.com/apache/cordova-plugin-media/blob/master/src/ios/CDVSound.m#L814
> How to reproduce: Add 1 or 2 large animated GIFs with 200+ frames to the UIWebView, this
will consume 500MB quickly while playing the GIFs, or simulate the memory warning using the
iOS Simulator while playing a sound.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org


Mime
View raw message