Java 从任何地方参加活动

Java 从任何地方参加活动,java,android,Java,Android,我正在实现一个登录系统。如果令牌不再有效,则需要将用户从以前的任何活动重定向到登录活动。我可以用这个进入登录活动 new Intent(CurrentActivity.this, NextActivity.class); 但这需要当前的活动。我只想去登录活动,无论我在哪里。我不知道我在哪里,因为这是在一个完全不同的包中。您可能应该在应用程序类中注册到,如果用户未注册,请将其发送到正确的活动 只是要确保不要无休止地将它们从登录页面发送到自己 编辑: 添加一些代码和解释 为了弄清楚一个不应该处于活

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

new Intent(CurrentActivity.this, NextActivity.class);

但这需要当前的活动。我只想去登录活动,无论我在哪里。我不知道我在哪里,因为这是在一个完全不同的包中。

您可能应该在应用程序类中注册到,如果用户未注册,请将其发送到正确的活动

只是要确保不要无休止地将它们从登录页面发送到自己

编辑: 添加一些代码和解释

为了弄清楚一个不应该处于活动状态的活动是否正在经历生命周期事件,您需要实现某种把关人。以前,它是保存在应用程序类中的某种静态状态,保存当前活动,有时甚至保存当前活动的堆栈

这远远不是一个完整的解决方案,并且由于不同的任务甚至是孤立的过程而存在问题

在API 14中,Android引入了活动生命周期回调,它可以传递到
应用程序
类中的方法中

基本上,您要做的是:

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

您可能应该在应用程序类中注册到,如果用户未注册,则将其发送到正确的活动

只是要确保不要无休止地将它们从登录页面发送到自己

编辑: 添加一些代码和解释

为了弄清楚一个不应该处于活动状态的活动是否正在经历生命周期事件,您需要实现某种把关人。以前,它是保存在应用程序类中的某种静态状态,保存当前活动,有时甚至保存当前活动的堆栈

这远远不是一个完整的解决方案,并且由于不同的任务甚至是孤立的过程而存在问题

在API 14中,Android引入了活动生命周期回调,它可以传递到
应用程序
类中的方法中

基本上,您要做的是:

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

您必须将标志\活动\新任务标志添加到您的意图中

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
尝尝这样的

Intent i = new Intent();
i.setClass(this,TestActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

替换目标活动的TestActivity.class

您必须将标志\活动\新任务标志添加到您的意图中

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
尝尝这样的

Intent i = new Intent();
i.setClass(this,TestActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

为您的目标活动替换TestActivity.class

在您的每项活动中检查您的令牌,并从中激发此意图,这不会重复。我已经有了一个包,可以进行api调用,处理它们,验证令牌,所有的提示。在每个文件中反复执行此操作是没有意义的。
但这需要当前活动。
您说的“当前活动”是什么意思?它只需要一个
上下文
启动触觉
,没有别的了,我如何获得上下文?这不在活动的主类中。它在另一个从主类调用的包中。你必须通过它。在你的每个活动中检查你的令牌,并从中激发这个意图,这不会重复。我已经有了一个包,可以进行api调用,处理它们,验证令牌,所有的提示。在每个文件中反复执行此操作是没有意义的。
但这需要当前活动。
您说的“当前活动”是什么意思?它只需要一个
上下文
启动触觉
,没有别的了,我如何获得上下文?这不在活动的主类中。它在另一个从主类调用的包中。你必须传递它,它到底做什么?快速的谷歌搜索似乎并没有给出任何具体的解释。文档在文本上也是稀疏的。它具体做什么?快速的谷歌搜索似乎并没有给出任何具体的解释。文档在文本上也是稀疏的。任务似乎是一种方式,但它是否适合用例?任务应该是完全独立的。在这里,我想发送用户登录。任务似乎是一种方式,但它是否适合该用例?任务应该是完全独立的。在这里我想发送用户登录。