如何在我的屏幕关闭时启动自动超时计时器并且应用程序转到后台情况并且当我单击注销时需要停止计时器

时间:2018-01-31 04:41:37

标签: android

我正在处理大量活动,我需要在我的应用处于非活动状态时实现自动超时。我的情况是当我登录我的计时器需要启动,如果我在登录后没有做任何事情。

  

我的计时器需要从与应用程序的最后一次交互开始,
  我的计时器需要在我的应用程序进入后台并屏蔽关闭案例时启动   当我从应用程序注销时,我的计时器需要停止。

我尝试使用以下代码:

public class MyBaseActivity extends Activity {

    public static final long DISCONNECT_TIMEOUT = 300000; // 5 min = 5 * 60 * 1000 ms

    private Handler disconnectHandler = new Handler(){
        public void handleMessage(Message msg) {
        }
    };

    private Runnable disconnectCallback = new Runnable() {
        @Override
        public void run() {
            // Perform any required operation on disconnect
        }
    };

    public void resetDisconnectTimer(){
        disconnectHandler.removeCallbacks(disconnectCallback);
        disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT);
    }

    public void stopDisconnectTimer(){
        disconnectHandler.removeCallbacks(disconnectCallback);
    }

    @Override
    public void onUserInteraction(){
        resetDisconnectTimer();
    }

    @Override
    public void onResume() {
        super.onResume();
        resetDisconnectTimer();
    }

    @Override
    public void onStop() {
        super.onStop();
        stopDisconnectTimer();
    }
}

但是当我的应用程序进入后台或应用程序屏幕关闭时,此代码无法启动我的计时器,在这些情况下计时器停止。 请给我你宝贵的建议,帮助我节省时间。谢谢。

1 个答案:

答案 0 :(得分:0)

需要检测应用是否处于后台状态

@Override
    public void onStop() {
        if (Constant.isAppIsInBackground(this)) {
            stopDisconnectTimer();
            resetDisconnectTimer();
        }else {
            stopDisconnectTimer();
        }
        super.onStop();
        //stopDisconnectTimer();
    }

这里的isAppisBackground()是检测背景状态的方法