1

我希望我的应用程序在 30 分钟后自动注销。所以我对我有很多选择感到困惑。1.handlers 但我认为如果我使用处理程序,它不会计算显示睡眠时间,我也无法在另一个活动中恢复处理程序。2.AlarmManager 我不太了解它,但我认为它使用更多的cpu 内存。3.CountDownManager 就像我在下面使用的一样

new CountDownTimer(40000, 1000) { //40000 milli seconds is total time, 1000 milli seconds is time interval

 public void onTick(long millisUntilFinished) {
  }
  public void onFinish() {
 }
}.start();

但是我可以在另一个活动中恢复 CountDownManager 进程吗 4.timer 在java中它将创建另一个线程

或者是我应该使用服务并包括上述方法之一的必要条件。因为有可能用户可以按下主页按钮并且应用程序进入 onPause() 状态。或者显示器可以在一段时间后休眠。我也不想要我的应用程序变慢。将使用服务会减慢我的应用程序。任何人都可以帮助我。

4

3 回答 3

4

您可以使用超时,这是一个简单的示例。

    public static final int TIMEOUT_FOR_APPLICATION = 1800000;//exit app after 30 minutes



    private void timeout() {

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {

        finish();//or whatever you want to do


        }
    }, TIMEOUT_FOR_APPLICATION);

}

希望这就是你要找的...

干杯

于 2013-08-16T10:14:55.530 回答
2

使用AlaramManager并在 30 分钟后设置警报。并且您必须为此使用待处理的意图,以便您的服务将在 30 分钟后被调用。你可以在那里做代码。

您可以看到如何以编程方式设置警报?

如果您想获得空闲时间而不是触摸或专注,则可以重置该警报。

对于屏幕关闭,您可以在 onPause 和 onResume 处编写代码。

于 2013-08-16T10:26:11.983 回答
2

在您的类 User 中添加一个字段 lastLogin。

private static final Long EXPIRE_TIME = 1000L * 60 * 30; //30M
private static final Long DELAY_TIME = 1000L * 60 * 5;
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleWithFixedDelay(new ContainerCleaner(), EXPIRE_TIME, DELAY_TIME, TimeUnit.MILLISECONDS);

public class ContainerCleaner implements Runnable {
    @Override
    public void run() {
        UserCache.cleanupContainer();
    }
}

在用户缓存中

public synchronized void cleanupContainer() {
    Collection<User> users= userCache.values();
    for (Userp : users) {
        if (isExpired(p)) {
            expire(p);
        }
    }
}
private boolean isExpired(SessionProfile sessionProfile) {
    if (sessionProfile == null) {
        return false;
    }
    Long lastAccess = sessionProfile.getValue(Name.LASTACCESS);
    return System.currentTimeMillis() - lastAccess > EXPIRE_TIME;
}

代码来自我的网络服务。它将每 5 分钟检测一次用户是否过期。

于 2013-08-16T10:27:50.113 回答