如何检测用户在Android中有多个活动一段时间不活动

如何检测用户在Android中有多个活动一段时间不活动,第1张

概述我知道同样的问题是 here,已经有人问过,并且有答案,但我对这个答案有疑问. 我的要求是,我想确定用户是否在5分钟内处于非活动状态,然后用户从应用程序中自动注销并上传登录并注销服务器上的日志. 我已经尝试了上面链接中的所有答案,但该答案适用于单一活动,但我想跟踪它以进行多项活动. 为此,我创建了抽象类 public abstract class SessionTimeOutActivity ex 我知道同样的问题是 here,已经有人问过,并且有答案,但我对这个答案有疑问.

我的要求是,我想确定用户是否在5分钟内处于非活动状态,然后用户从应用程序中自动注销并上传登录并注销服务器上的日志.

我已经尝试了上面链接中的所有答案,但该答案适用于单一活动,但我想跟踪它以进行多项活动.

为此,我创建了抽象类

public abstract class SessionTimeOutActivity extends BaseActivity {    public static final long disCONNECT_TIMEOUT = 1000 * 60; // 5 min = 5 * 60 * 1000 ms    private static Handler disconnectHandler = new Handler(new Handler.Callback() {        @OverrIDe        public boolean handleMessage(Message msg) {            Log.d("SessionTimeOutActivity","disconnectHandler");            return false;        }    });    private Runnable disconnectCallback = new Runnable() {        @OverrIDe        public voID run() {            // Perform any required operation on disconnect            Log.d("SessionTimeOutActivity","disconnectCallback");            Toast.makeText(getApplicationContext(),"Session time out",Toast.LENGTH_LONG).show();            Intent intent = new Intent(getApplicationContext(),LoginActivity.class);            startActivity(intent);            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_top);            finish();        }    };    public voID resetdisconnectTimer() {        disconnectHandler.removeCallbacks(disconnectCallback);        disconnectHandler.postDelayed(disconnectCallback,disCONNECT_TIMEOUT);    }    public voID stopdisconnectTimer() {        disconnectHandler.removeCallbacks(disconnectCallback);    }    @OverrIDe    public voID onUserInteraction() {        Log.d("SessionTimeOutActivity","onUserInteraction");        resetdisconnectTimer();    }    @OverrIDe    public voID onResume() {        super.onResume();//        resetdisconnectTimer();    }    @OverrIDe    public voID onStop() {        super.onStop();//        stopdisconnectTimer();    }}

app中的其他活动

public class MenuActivtyNav extends SessionTimeOutActivity{.....}

MenuActivity

public class MenuActivty extends SessionTimeOutActivity{....}

问题是

1)在锁定屏幕中自动注销不起作用,它不调用disconnectCallback

2)使用应用程序时,它会显示Toast消息“Session time out”

解决方法 让我们首先了解您的代码没有按照您的意愿行事的原因.

问题1.您应该避免在AndroID上的活动中长时间运行任务,尤其是当它们不可见时,因为系统可能会终止您的活动或应用程序进程,因此代码将无法运行.

问题2.每个活动都会将断开连接回调发送到您的处理程序,如果用户正在与第二个活动进行交互,则第一个活动的回调将不会被重置并将触发.

解.

现在让我们考虑解决这个问题的方法.
最好有一个地方来跟踪不活动.它可以是单例,也可以使用应用程序对象.
并分别处理2个案例:第一个是您的用户在应用程序内部并且没有使用它而另一个是您的用户不在应用程序中时.

对于第一个目标,您可以采用与当前目标类似的方法,但在应用程序中创建共享disconnectCallback.将处理程序,回调和重置回调逻辑移动到Application类并创建

@OverrIDepublic voID onUserInteraction()

在Application上调用resetCallback.这将使所有活动使用相同的回调并解决问题2.

对于第二个目标,您可以使用Activity Lifecycle Callbacks.
每次暂停活动时都会保存时间戳.然后,每次恢复活动时,将此时间戳与恢复时间进行比较,如果大于5分钟,则注销用户并路由到登录屏幕.它将解决问题1.您需要保留此时间戳,因为应用程序可能被系统杀死,并且内存中共享的所有内容都将被删除.例如,使用共享首选项.

最后一件事,当应用程序进入后台时,您需要取消回调.您可以在活动回调的onActivityPaused(活动活动)中执行此 *** 作,在您将触发第二种情况的逻辑的位置.

总结

以上是内存溢出为你收集整理的如何检测用户在Android中有多个活动一段时间不活动全部内容,希望文章能够帮你解决如何检测用户在Android中有多个活动一段时间不活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存