What I have done successfully in the past is to create an invisible activity as the main activity. It never gets shown to the user, because it launches the "correct" activity in the constructor.
For this reason, there is no need to theme the activity as "invisible" as it does not load a view.
Inside I place some logic which determines which activity to show to the user first. This works perfectly for my use case - give it a try.
Manifest Declaration (note the noHistory="true"
parameter):
<activity
android:name=".activity.EntryActivity"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
EntryActivity class:
public class EntryActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// launch a different activity
Intent launchIntent = new Intent();
Class<?> launchActivity;
try
{
String className = getScreenClassName();
launchActivity = Class.forName(className);
}
catch (ClassNotFoundException e)
{
launchActivity = DefaultHomeActivity.class;
}
launchIntent.setClass(getApplicationContext(), launchActivity);
startActivity(launchIntent);
finish();
}
/** return Class name of Activity to show **/
private String getScreenClassName()
{
// NOTE - Place logic here to determine which screen to show next
// Default is used in this demo code
String activity = DefaultHomeActivity.class.getName();
return activity;
}
}