Android中的dynamic启动活动?

有没有一种方法可以根据条件dynamic更改Android中的开始活动? 我试图做的(不起作用)如下:

  1. 删除我的AndroidManifest.xml中定义的LAUNCHER类别
  2. 创build一个应用程序使用的自定义应用程序类
  3. 重写我的Application类的onCreate方法来定义如下代码:

if (condition) { startActivity(new Intent(this, MenuActivity.class)); } else { startActivity(new Intent(this, LoginActivity.class)); } 

为什么没有一个没有UI的初始Activity来检查onCreate的条件,然后启动下一个Activity ,然后调用finish()呢? 我从来没有从onCreate()内部调用finish() ,所以我不知道这是否会工作。

编辑
似乎工作正常。 这里有一些代码使其更清晰。
初始Activity

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent; if (condition) { intent = new Intent(this, ClassA.class); } else { intent = new Intent(this, ClassB.class); } startActivity(intent); finish(); // note we never called setContentView() } 

其他Activity

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } 

这是我亲自为我的一个小型移动项目所做的。 而不是创build一个单独的,无屏幕的Activity ,其中的条件是,并启动相应的屏幕,我把条件放在一个Activity ,并做了一个dynamicsetContentView() ,如下所示:

 if (!userIsLoggedIn) { setContentView(R.layout.signup); } else { setContentView(R.layout.homescreen); } 

这个方法有两个重要的注释:

1:不要在onCreate()中写这个,而是想把决策放在onResume()因为只要屏幕需要在前面显示,总是调用后者。 您可以从Android 活动生命周期中看到这一点。 因此,例如,如果用户刚下载我的应用程序并首次启动它,因为没有用户login,她将被引导到注册页面。 当她完成注册并出于某种原因按下HOMEbutton(不是BACK ,完全退出应用程序!),然后恢复应用程序,她将看到的布局已经是主屏幕。 如果我把条件放在onCreate() ,那么显示的是注册屏幕,因为根据生命周期,当把应用程序带回前面时,它不会回到onCreate()

2:这种解决scheme是理想的,只有合并这两个活动的function不会产生长长的恶魔般的代码块。 就像我说的,我的项目是一个小的(它的主要特点发生在后台),所以单一的dynamicActivity没有太多的。 无屏幕的Activity绝对是如果你需要你的代码更易于阅读的方式。