It would still be nice to see some kind of callback/warning that such
a thing is about to happen.

I'm writing an app that uses a cursor to iterate over images from the
system's media-content-provider.

Sometimes this content-provider is being shut-down (low memory) and it
takes my application down with it.

On Dec 6, 6:41 pm, Dianne Hackborn <[email protected]> wrote:
> The system raises the level of the process(es) hosting content providers you
> are using to the same level as yours; so if your app is in the foreground
> when this happens, it means that there is just so little memory available in
> the system that it can't even keep all of the foreground processes going,
> and aside from simply not using that provider there is little you can do.
>  (You can be sure to not keep open access on providers, if you are keeping
> them open for a long time, so the system has some other process to kill that
> you don't need right then.)
>
> If this is happening while you are in the background running a service...
>  well, getting killed while in the background is something that will happen,
> and the more sessions you have with providers the more likely it is to
> happen since this causes more memory pressure.  Again, only keep providers
> open while you need them, and accept you will have your service killed at
> some points, with or without it using providers.
>
> On 1.6 you can use "adb shell dumpsys activity" to see a list of all of the
> running processes, what level they are at, and why this is, which can help
> track down for example why a lot of processes may be in the foreground.
>  This is the second to last pocess list, with the oom_adj levels.
>
> On Sun, Dec 6, 2009 at 9:58 AM, Daniel <[email protected]>wrote:
>
>
>
>
>
> > Some of my apps silently close on my G1 (Android 1.6) because some
> > Content Providers they use are hosted in processes that are killed due
> > to low memory. Is there anything to protect an app from silently
> > closing because a content provider it uses is shut down? Is there some
> > remote exception to give the app a change to continue its work with
> > less features (e.g. do not query dead content providers)?
> > Below is a trace that shows this situation.
>
> > Quickdroid uses the BrowserProvider. But since the BrowserProvider and
> > its hosting Linux process died, Quickdroid is also killed silently.
> > That is a really bad user experience :-(
>
> > I/ActivityManager(   75): Starting activity: Intent
> > { cmp=fm.last.android/.activity.Preferences }
> > I/ActivityManager(   75): Process fm.last.android:player (pid 17574)
> > has died.
> > I/ActivityManager(   75): Low Memory: No more background processes.
> > I/ActivityManager(   75): Displayed activity
> > fm.last.android/.activity.Preferences: 844 ms (total 844 ms)
> > D/dalvikvm(17546): GC freed 4991 objects / 247032 bytes in 155ms
> > I/ActivityManager(   75): Start proc fm.last.android:player for
> > service fm.last.android/.player.RadioPlayerService: pid=17676
> > uid=10051 gids={3003, 1015}
> > I/fm.last.android.player(17676): Player service started
> > I/ActivityManager(   75): Stopping service:
> > fm.last.android/.player.RadioPlayerService
> > I/fm.last.android.player(17676): Player service shutting down
> > I/ActivityManager(   75): Start proc vu.de.urpool.quickdroid for
> > activity vu.de.urpool.quickdroid/.Quickdroid: pid=17683 uid=10030 gids=
> > {}
> > I/ActivityManager(   75): Process fm.last.android:player (pid 17676)
> > has died.
> > I/ActivityManager(   75): Low Memory: No more background processes.
> > I/ActivityThread(17683): Publishing provider quickdroid:
> > vu.de.urpool.quickdroid.apps.AppProvider
> > I/ActivityManager(   75): Start proc com.android.browser for content
> > provider com.android.browser/.BrowserProvider: pid=17696 uid=10022
> > gids={3003}
> > I/ActivityThread(17696): Publishing provider browser:
> > com.android.browser.BrowserProvider
> > I/ActivityManager(   75): Displayed activity
> > vu.de.urpool.quickdroid/.Quickdroid: 2802 ms (total 2802 ms)
> > I/ActivityManager(   75): Process fm.last.android (pid 17546) has
> > died.
> > I/WindowManager(   75): WIN DEATH: Window{4397eb40 fm.last.android/
> > fm.last.android.activity.Profile paused=false}
> > I/ActivityManager(   75): Low Memory: No more background processes.
> > I/ActivityThread(17683): Removing dead content provider: browser
> > I/ActivityManager(   75): Process com.android.browser (pid 17696) has
> > died.
> > I/ActivityManager(   75): Killing app vu.de.urpool.quickdroid (pid
> > 17683) because provider com.android.browser.BrowserProvider is in
> > dying process com.android.browser
> > I/Process (   75): Sending signal. PID: 17683 SIG: 9
> > I/WindowManager(   75): WIN DEATH: Window{43a0eff0
> > vu.de.urpool.quickdroid/vu.de.urpool.quickdroid.Quickdroid
> > paused=false}
> > I/ActivityManager(   75): Low Memory: No more background processes.
> > I/ActivityManager(   75): Process vu.de.urpool.quickdroid (pid 17683)
> > has died.
> > W/UsageStats(   75): Unexpected resume of com.android.launcher while
> > already resumed in vu.de.urpool.quickdroid
> > I/ActivityManager(   75): Low Memory: No more background processes.
> > W/InputManagerService(   75): Got RemoteException sending setActive
> > (false) notification to pid 17683 uid 10030
> > I/ActivityManager(   75): Starting activity: Intent
> > { act=android.intent.action.MAIN cat=
> > [android.intent.category.LAUNCHER] flg=0x10200000
> > cmp=vu.de.urpool.quickdroid/.Quickdroid }
> > I/ActivityManager(   75): Start proc vu.de.urpool.quickdroid for
> > activity vu.de.urpool.quickdroid/.Quickdroid: pid=17708 uid=10030 gids=
> > {}
> > D/dalvikvm(   50): GC freed 269 objects / 10248 bytes in 174ms
> > D/dalvikvm(   50): GC freed 42 objects / 1816 bytes in 104ms
> > D/dalvikvm(   50): GC freed 2 objects / 56 bytes in 83ms
> > I/ActivityThread(17708): Publishing provider quickdroid:
> > vu.de.urpool.quickdroid.apps.AppProvider
> > I/ActivityManager(   75): Displayed activity
> > vu.de.urpool.quickdroid/.Quickdroid: 1399 ms (total 1399 ms)
> > I/ActivityManager(   75): Starting activity: Intent
> > { act=android.intent.action.MAIN cat=
> > [android.intent.category.LAUNCHER] flg=0x10000000
> > cmp=com.android.term/.Term }
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]<android-developers%2bunsubs­[email protected]>
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> --
> Dianne Hackborn
> Android framework engineer
> [email protected]
>
> 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.- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to