如果用户将应用程序置于后台/在 android/kotlin 中的应用程序上处于非活动状态,如何注销用户



>我发布这个问题,因为我没有找到完美的解决方案。我想注销用户,如果他/她按下了主页按钮或在应用程序上处于非活动状态 5 分钟。

我尝试使用如下计时器(kotlin 代码(,但这不是真正的正确方法,它仅适用于单个活动屏幕,而不是整个应用程序:

 timer = object : CountDownTimer((1 * 60 * 1000).toLong(), 1000) {
            override fun onTick(millisUntilFinished: Long) {
                Toast.makeText(this@MainActivity, "Ticking", Toast.LENGTH_LONG).show()
            }
            override fun onFinish() {
                currentUser = mAuth!!.currentUser!!
                // Code for Logout
                Toast.makeText(this@MainActivity, "Finished", Toast.LENGTH_LONG).show()
                val colref = mFirestore.collection("AllUsers")
                deleteCollectiontimer(colref, EXECUTOR)
            }
        }
        override fun onResume() {
        super.onResume()
        Toast.makeText(this@MainActivity, "Timer Stopped", Toast.LENGTH_LONG).show()
        timer.cancel()
    }
    override fun onStop() {
        super.onStop()
        Toast.makeText(this@MainActivity, "Timer Started", Toast.LENGTH_LONG).show()
        timer.start()
    }
        
        

但是如果我把上面的代码放在每个活动中 onstop(( 和 onresume((,那是不对的。所以我对如何在整个应用程序上处于非活动状态时注销用户感到困惑?

我也读过类似 ProcessLifecycle owner 的东西,但不太了解如何使用它,所以在这种情况下可以帮助我,如果是,那么如何?

是否有特定的生命周期方法或直接代码可以处理整个应用程序的不活动状态?

任何帮助,不胜感激。

下面是一个可以在应用程序级别尝试的示例。

  public class App extends Application {
    private Handler handler;
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
            }
            @Override
            public void onActivityStarted(Activity activity) {
            }
            @Override
            public void onActivityResumed(Activity activity) {
            }
            @Override
            public void onActivityPaused(Activity activity) {
            }
            @Override
            public void onActivityStopped(Activity activity) {
                startTrackingPauseTime();
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }
    private void startTrackingPauseTime() {
        if (handler != null) return;
        handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //some action to logout user
            }
        }, 1000 * 60 * 5);
    }
}
如果

新使用,请不要忘记在清单中注册此应用程序。

这里有一本很好的阅读,关于如何使用ProcessLifecycle Owner和其他方法来解决这个问题。

很简单,创建一个名为BaseActivity的自定义活动,并将代码放入其中,然后将其扩展到所有活动中。不要忘记覆盖onResume和onStop方法...

但上面的解决方案最好由维卡斯库马尔给出......

相关内容

最新更新