我正在为这个问题寻找一个优雅的解决方案/模式(伪代码):
public class LoggedInActivity extends Activity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isUserLoggedIn()) {
finish();
startActivity(getLoginActivity());
}
}
...
}
class MainActivity extends LoggedInActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
codeThatShouldNotBeExecutedWithoutUser();
}
}
我正在寻找一种不触及LoggedInActivity的每个子类的方法,并在那里进行检查 - 在理想世界中,我可以完全解决LoggedInActivity中的这个问题 - 但我还没有看到它。
答案 0 :(得分:1)
解决这个问题的好方法是:
LoggedInActivity
成为abstract class
。添加一个抽象方法:
abstract void codeThatShouldNotBeExecutedWithoutUser();
更改所有子类以实现(并覆盖)codeThatShouldNotBeExecutedWithoutUser()
。如果他们已经实现了该方法,您至少应该添加@Override
注释,以明确该方法被覆盖。
codeThatShouldNotBeExecutedWithoutUser()
的调用。当且仅当用户已登录时,将LoggedInActivity.onCreate()
更改为呼叫codeThatShouldNotBeExecutedWithoutUser()
:
@Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!isUserLoggedIn()) { finish(); startActivity(getLoginActivity()); } else { codeThatShouldNotBeExecutedWithoutUser(); } }