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

时间:2019-04-23 09:29:02

标签: 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()的每个活动中,那是不对的。所以我对如何在整个应用程序不活动时注销用户感到困惑?

我也读过类似ProcessLifecycleowner的内容,但不太了解如何使用它,因此在这种情况下可以对我有帮助吗?如果可以,怎么办?

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

非常简单,创建一个名为BaseActivity的自定义活动,然后将代码放入其中,然后将其扩展到所有活动中。 别忘了重写onResume和onStop方法...

但是上述解决方案最好由vikas kumar给出...

答案 1 :(得分:0)

这里是一个示例,您可以在应用程序级别尝试。

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

如果是新使用的,请不要忘记在清单中注册该应用程序。

此处是有关如何使用 ProcessLifecycleOwner 和其他方法problem的很好的阅读。