I have an Activity that should only get created once. That is, onCreate can only be called once. If it’s called again, I want the Activity to do nothing.
Is it advisable to do the following?
protected void onCreate(Bundle savedInstanceState) {
this.setTheme(android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
super.onCreate(savedInstanceState);
if(onCreateWasCalledAlreadyBoolean) {
setResult(RESULT_OK);
finish();
return;
}
//Do other stuff here
}
I assume you understand how the activity life cycle works. I mean, you are not trying to avoid something that does not apply here (thinking that
onCreatemay be called multiple times whenever it justonRestarts etc.).Technically, it’s perfectly fine.
However, you should be worrying more about why you need to call your activity (“A“) again if it shouldn’t be created at all, if that’s what you’re thinking.
If you’ve caught yourself checking if your activity A was already “called” (?), this could mean the previous activity (“B“) has a mistake in the logic flow of the app, and that B instead should be checking if it must in fact start that activity A. I mean, if you need to decide if you must call an activity, check before starting it.
I don’t think that’s applicable if you’re restarting the activity (e.g.: go Home, then navigate back), but then again you should be restarting it from where you left (B for what I can tell). You won’t be navigating back to A. And you didn’t give much detail, so I’d guess this is some kind of splash screen, like evilmage93 said.
If that’s indeed some kind of splash screen, I would advise to show it whenever the user navigates back all the way to remove your app from the task stack (contrary to his advice). In other words, whenever the user restarts the app from its “front door”.
Although that’s ultimately a design decision, I prefer to see the splash screen whenever the app is being loaded (“entered”) in the stack for the first time, and it should work fine if you (obviously) finish A before calling B (the splash screen is supposed to
finishitself when done, even in its first run). It’s a matter of consistency: the same app should behave the same way whenever the user performs the same task (start app from its “front door”).Still, I answered your question covering some general aspects because you asked in such way.
// edited:
Finally, by looking at that
onCreateWasCalledAlreadyBooleanI’m afraid you may be trying to reinvent part of the activity life cycle mechanism. In this case, don’t: proceed with your regular activity logic because the user expects that behavior. Generally I wouldn’t advise people to break the normal loading of an activity just because it was killed and restarted by the system.