-
Notifications
You must be signed in to change notification settings - Fork 378
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How is ondestroy managed by the MediaLibraryService in demo app #1749
Comments
Thanks for your question. I think there are a few things that play in here, I try may best to address these. I think issue 2 as you call it is behaving as expected:
For issue 2 you need to find whether the player has been prepared with media items and then when the player has been released. I think what you find is that It may be that there is an issue in the sequence of when release and onDestroy is called depending on what the app is doing or, whether there is a unexpected behaviour on an OS. This is difficult to tell with the available information. To get the full picture, you can add an EventLogger to your player and add some log statement to the life-cycle methods of your service and where you release the player. Then you see the sequence of events which may tell why the current media items and position has been reset. If there is something that looks suspicious in the sense that the Media3 library does something unexpected or doesn't atnticipate a behavour of the OS correcntly, please post a bug report taken right after the incident so we can take a look. |
I am trying this code which is the same code from the session demo app
When we use it with API level 26 Pixel 2 emulator the "mediaId $mediaId position $position" both are recorded which is expected behavior The problem is with Api level 34 and above For step 1 here is the video VideoCook_20240924_101409554.mp4and the Log cat
as we can see the mediaid and position are not collected at all
it is similar for the second case see my next comment for that. |
VideoCook_20240924_102317227.mp4and log cat is
here we get the mediaid and position
It should have been in the previous case also On samsung Galaxy Tab A7 Lite |
on Samsung first case
We dont get the mediaid and position
|
on samsung second case
as we can see we dont get the mediaid and position in this case also
I dont know if it is a API 34 level or samsung devices specific issue, To test this in the demo app just add a logcat as I have done in the ondestroy code that I have shared above, I have tested it in the demo app and have shared various cases, Please test for both cases and on APi level 34 and above and below as well, Also If posible test on Samsung and other devices as I dont have these devices I dont know if it is an issue on other devices as well. I hope the videos and logcat will be helpful to resolve the issue and if it is a bug it will be resolved soon, In the meantime if there is a work around please share it as it is a necessity for me to save the last played song, |
Thanks. If you want to make our lives a bit easier, then for a next time please send bugreports instead of pasting long logs. This is hard to read on a web page and we have tools to look into bugreports quite conveniently. Bugreports also include all the required information about exact build numbers and the like. Lets focus on case 1 for now. I think there is an issue with either the app or then the OS. The reason that makes me think this is the following logs that show that the session/player is initialized just before you try to read the current media item:
I think this is a duplicates of #805 or #933 I can check for Pixel devices whether this is fixed on Android 14 and on TOT of the sources. I can also update this thread with the procedure how I test this. For Samsung you either need to send me a bugreport or you can check yourself. I don't think there is a fix in Media3. We may be able to workaround issues on some devices, builds but I don't think the root cause is in Media3. I may be wrong. I'll update this bug with a test scenario. |
I have mailed the bug report for the issue related to samsung devices to email id mentioned in the bug reporting email id that has been provided by media 3. Please check the bug report hope it will be helpful. |
How is
ondestroy
managed by theMediaLibraryService
in demo appI am trying to save the last song mediaUri and currentposition of the song in
Jetpack DataStore
for this I am usinghow ever I found these two issues
When we pause the player and swipe the app to close it , the ondestroy method is called but the values for
uristring
andposition
arenull
If we have already swiped the app , yet the player is playing using the service and notification, if we now pause the song and swipe the notification away ondestroy is called after a long time mostly 30 seconds to 1 minute.
I have tested it on samsung Galaxy Tab A7 Lite
Android version 14
This issue occured on this device mediauri is null for the first issue , some times the second issue occur but the ondestroy was called after a really long time like 1 minute after the app service was closed using the notification and the mediauri is null .
However testing on Pixel 3A Api 34 there were issues like we dont get the uri was null and position was 0 in the first issue and on destroy takes a long time for the second issue but we get the uri and the position
On Android pixel 2 Api 26 both issues didnot occur however ondestroy took a long time for the second issue.
It seems to be device specific issue , however samsung dominates the android device market so, Is there a solution for this,
Please test this issue on devices other than pixel where mostly all the issues are resolved.
To Reproduce the issue just add following code to the demo app here
It seems a API 34 or above level issue specially if we pause the player and swipe it away we dont get either the mediauri and the position at all. they return null and 0 respectively.
I have not tested on other api level other than those mentioned above.
and follow above two steps to reproduce each issue separately.
I want to save the currentposition and uri as string using the datastore, how can we achieve this if ondestroy has above issues, is there any work around to do this, I have tried to save the current uri using the
player.addListener(object : Player.Listener {})
but I assume it must be not an efficient way in case the user skips to previous and next songs in a speedy manner and there is no way to save the current position unless we use ondestroy,The text was updated successfully, but these errors were encountered: