我正在实施一个登录系统。如果令牌不再有效,则需要将用户从任何先前的活动重定向到登录活动。我可以用这个去登录活动

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*/ }
        });
    }
}

08-16 16:05