我正在实施一个登录系统。如果令牌不再有效,则需要将用户从任何先前的活动重定向到登录活动。我可以用这个去登录活动
new Intent(CurrentActivity.this, NextActivity.class);
但这需要当前的活动。无论我身在何处,我都只想参加登录活动。我不知道我在哪里,因为它在一个完全不同的包中。
最佳答案
您可能应该在Application类中注册到ActivityLifecycleCallbacks
,如果未注册用户,请将其发送到正确的Activity。
只要确保不要无休止地将它们从登录页面发送到自己
编辑:
添加一些代码和说明。
为了弄清楚一个不应该存活的活动是否正在经历生命周期事件,您需要实现某种形式的关守。以前,它曾经是某种静态状态,保留在Application类中,并保留当前活动,有时甚至包含当前活动的堆栈。
这远非一个完整的解决方案,并且由于任务不同甚至流程相互隔离而存在问题。
Android在API 14中引入了Activity生命周期回调,可以将其传递到Application
类的方法registerActivityLifecycleCallbacks中。
您基本上想要做的是以下几点:
class ThepooshApplication extends Application {
private static sIsRegistered = false;
public static setIsRegistered(boolean isRegistered) { sIsRegistered = isRegistered; }
public void onCreate() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks(){
@Override
void onActivityCreated(Activity activity, Bundle savedInstanceState){
if (!sIsRegistered && !(activity instanceof LoginActivity)) {
Intent loginIntent = new Intent(this, LoginActivity.class);
loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);
}
}
@Override
void onActivityStarted(Activity activity) { /*empty method*/ }
@Override
void onActivityResumed(Activity activity) { /*empty method*/ }
@Override
void onActivityPaused(Activity activity) { /*empty method*/ }
@Override
void onActivityStopped(Activity activity) { /*empty method*/ }
@Override
void onActivitySaveInstanceState(Activity activity, Bundle outState) { /*empty method*/ }
@Override
void onActivityDestroyed(Activity activity) { /*empty method*/ }
});
}
}