tags:

views:

99

answers:

1

I have one Android application, when it runs a service, I want to show the notification on the status bar. Then the user could navigate to other application by pressing HOME key. However when I try to bring the previous running application back to Front via notification icon, there is some problem with the existing activity. Even I declare it as "Single Top" mode (I want to run the existing activity since there is an associated service running) , somehow that activity's OnDestroy has been called before OnResume. Here is my code of creating the notification object. Could you please point me what wrong it is. Thanks.

private void showNotification ()
{

  Intent toLaunch = new Intent(getApplicationContext(),
                                          MySingleTopActivity.class);

  PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(),   0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

  notification.setLatestEventInfo(getApplicationContext(),
         getText(R.string.GPS_service_name), text, intentBack);
....
}
A: 

When an Activity is in the background, Android may kill the activity at any time to free resources. See the Activity documentation for complete details on the lifecycle.

Your activity needs to be prepared to save its state in the onPause or onSaveInstanceState methods. The document referenced above has additional details on saving persistant state.

Mayra
I don't think the activity should be called by "onDestroy". Only "onPause" is called when it goes to background. And "onResume" is called when it is back to frontend. If I simply click on the application icon to re-start the application, there is no problem, only "OnResume" is called. However if I try to click on the notification icon, the activity goes "onDestroy" -> "OnResume", that causes problem.
onPause is called when it goes into the background. However, as its states in the referenced doc, Android may choose to kill the Activity at any time if it needs the resources, and thus onDestroy will be called. You cannot depend on the fact that onDestroy will not be called, thus you need to deal with it properly by saving state.
Mayra