Um. Regardless of how quickly the system restarts your activity, this is a
wretched user experience. I can hardly bring myself to help someone do
this.
Definitely don't schedule an alarm to do this. Please.
You are NEVER going to be able to fully prevent whatever was behind your
activity (typically from home) appearing. Your app crashed. Its UI is
gone. We aren't going to wait around for it, we are showing what was behind
it.
As far as when an activity is restarted -- if the process running the
foreground activity goes away, the system will throw away that activity if
it does not have a valid saved state for it (typically meaning it is paused
and has given the system the result of onSaveInstanceState from before the
pause). Once it has decided whether or not to throw away that activity, it
will resume whatever activity is now at the top of the stack. If this is
one of your activities -- either because you have another behind the one
that crashed, or the one that crashed was somehow it the settled pause state
-- then it will start your process again to show that top activity.
On Wed, Oct 14, 2009 at 10:35 AM, mik...@tat
wrote:
>
> Hello,
>
> we are developing an application where we are depending on a native,
> custom-written library which sometimes crashes. When the Activity
> crashes (it's the Activity's SurfaceView that crashes, either while
> resuming or pausing Activity) we would like to automatically restart
> the Activity that was just running, preferably without seeing the idle
> screen in between.
>
> What we find strange is that sometimes, our Activity is restarted by
> Android automatically after the crash, and sometimes not. How does
> Android decide this? Is it somehow dependant on exactly what the
> Activity was doing at the time of the crash and if that was considered
> important enough to restart? How can we force a restart to make sure
> the Activity doesn't quit after a crash?
>
> Some notes:
>
> Running on device flashed with Android 1.5.
> The Activity is running as singleInstance. Doesn't seem to make much
> difference which mode it is though.
>
> Other methods we have tried are:
>
> 1) Since we can predict when crash is going to happen(but not stop
> it), use AlamrManager to start the Activity again via an Intent, 3
> seconds later. Has the disadvantages that 1) need to be able to
> predict crash 2) if crash takes longer than 3 seconds (normally about
> 2s) it won't work 3) Idle screen is seen for about ~1 s, since some
> slack is needed.
>
> 2) Start a Service, then let the Service (which always seems to be
> restarted by Android after crashing) start the Activity in its onStart
> method. Has the disadvantage that Android doesn't restart the service
> until 5 seconds after the crash, so the idle screen is seen quite
> along time before Activity restarts. Is it possible to modify how long
> it takes before the Service is restarted by the Android system?
>
>
> Any help would be greatly appreciated.
>
> >
>
--
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
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
-~--~~~~--~~--~--~---