Bart Friederichs
Bart Friederichs

Reputation: 33511

Remove app completely from memory on exit

I am building an Android app, which starts a service that keeps running in the background. When the user uses the Home button to close one of the activities (which communicate with the service), and then navigates to the app again, they get the last activity. This is correct behaviour.

However, when I explicitly stop the service (via an option in the menu), the app should "Quit". Currently, that works like this:

stopService(new Intent(this, MyService.class));

finish();

// just go to to the home screen, as it is intended in Android
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

and that works fine. But when I now navigate to the app again, it starts the previously opened Activity. What I want is that it starts the starting activity again (the launcher).

How could I accomplish that?

Upvotes: 0

Views: 2495

Answers (4)

Taras Okunev
Taras Okunev

Reputation: 410

System.exit(0);

But you should have only one Activity in stack.

Upvotes: 1

free3dom
free3dom

Reputation: 18978

Have you tried setting the clearTaskOnLaunch to true for your main activity (in your manifest).

From the documentation:

When the value is "true", every time users start the task again, they are brought to its root activity regardless of what they were last doing in the task and regardless of whether they used the Back or Home button to leave it.

This seems to describe what you want to do. I have never tried this personally, but it seems worth investigating for your purpose.

Upvotes: 0

Tom
Tom

Reputation: 17854

I think that removing 'the app completely from memory on exit' is not the issue. Even if you stop your service the process is likely to remain in memory - that is the systems' decision.

You want an explicit, custom behaviour - user chooses your 'exit' option from menu --> next app launch starts at main activity - so you will need to handle this explicitly.

The default behaviour is that the user returns to their last activity when they re-launch. So they only return to the main activity if they exit by 'backing out' through your activities. Your use of an 'exit' menu option is non-standard (not to say it is bad).

One option would be to do the backing out through your activities yourself. Perhaps now you are just finishing the current activity and you should instead finish all the activities in the back stack.

Another option is that you could save a flag, and when the UI is launched again you could read that flag and launch the appropriate activity (but again be careful with the backstack). The easiest way to set that flag is probably by overriding onSaveInstanceState(Bundle) and then reading the bundle in onCreate (or use sharedpreferences).

Upvotes: 0

An SO User
An SO User

Reputation: 24998

If you look at the description of android:excludeFromRecents it says:

Whether or not the task initiated by this activity should be excluded from the list of recently used applications ("recent apps").

isn't this what you are looking for ? Once the user hits exit, this app won't be in the recently used apps and hence will be completely removed from memory ? :)

Upvotes: 0

Related Questions