Android中的dynamic启动活动?
有没有一种方法可以根据条件dynamic更改Android中的开始活动? 我试图做的(不起作用)如下:
- 删除我的AndroidManifest.xml中定义的LAUNCHER类别
- 创build一个应用程序使用的自定义应用程序类
- 重写我的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,她将被引导到注册页面。 当她完成注册并出于某种原因按下HOME
button(不是BACK
,完全退出应用程序!),然后恢复应用程序,她将看到的布局已经是主屏幕。 如果我把条件放在onCreate()
,那么显示的是注册屏幕,因为根据生命周期,当把应用程序带回前面时,它不会回到onCreate()
。
2:这种解决scheme是理想的,只有合并这两个活动的function不会产生长长的恶魔般的代码块。 就像我说的,我的项目是一个小的(它的主要特点发生在后台),所以单一的dynamicActivity
没有太多的。 无屏幕的Activity
绝对是如果你需要你的代码更易于阅读的方式。