Java 在安卓系统中,应用程序30分钟后自动注销时使用什么
我希望我的应用程序在30分钟后自动注销。所以我对我有很多选择感到困惑。 1.1处理程序 但我认为如果我使用处理程序,它将不会计算显示睡眠时间,而且我也无法在另一个活动中恢复处理程序。 2.警报管理器 我对它了解不多,但我认为它需要更多的cpu内存。 3.倒计时管理器就像我在下面使用的一样Java 在安卓系统中,应用程序30分钟后自动注销时使用什么,java,android,Java,Android,我希望我的应用程序在30分钟后自动注销。所以我对我有很多选择感到困惑。 1.1处理程序 但我认为如果我使用处理程序,它将不会计算显示睡眠时间,而且我也无法在另一个活动中恢复处理程序。 2.警报管理器 我对它了解不多,但我认为它需要更多的cpu内存。 3.倒计时管理器就像我在下面使用的一样 new CountDownTimer(40000, 1000) { //40000 milli seconds is total time, 1000 milli seconds is time interva
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();
但我可以在另一个活动中恢复倒计时管理器过程吗
4.java中的定时器
它将创建另一个线程
或者这就是我应该使用服务并包括上述方法之一的必要性。因为有可能用户可以按home按钮,应用程序将转到onPause()状态。或者显示器会在一段时间后休眠。我也不希望我的应用程序变慢。使用服务会使我的应用程序变慢。有人能帮我吗。您可以使用超时,下面是一个简单的示例
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);
}
希望这就是你想要的
干杯您可以使用超时,下面是一个简单的示例
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);
}
希望这就是你想要的
干杯使用AlamManager并在30分钟后设置警报。您必须为此使用pending intent,以便在30分钟后调用您的服务。你可以在那里编写代码 你可以看到 如果你想得到空闲时间,那么如果你想得到触摸或焦点,那么你可以重置警报
对于屏幕关闭,您可以在onPause和onResume上编写代码。使用AlamManager并在30分钟后设置警报。您必须为此使用pending intent,以便在30分钟后调用您的服务。你可以在那里编写代码 你可以看到 如果你想得到空闲时间,那么如果你想得到触摸或焦点,那么你可以重置警报
对于screen off,您可以在onPause和onResume中编写代码。在类用户中添加一个字段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;
}
public synchronized void cleanupContainer(){
集合用户=userCache.values();
for(Userp:users){
如果(isExpired(p)){
过期(p);
}
}
}
专用布尔值isExpired(SessionProfile SessionProfile){
if(sessionProfile==null){
返回false;
}
Long lastAccess=sessionProfile.getValue(Name.lastAccess);
return System.currentTimeMillis()-lastAccess>EXPIRE\u TIME;
}
代码来自我的Web服务。它将每隔5分钟检测一次用户是否需要登录。在类用户中添加一个字段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;
}
public synchronized void cleanupContainer(){
集合用户=userCache.values();
for(Userp:users){
如果(isExpired(p)){
过期(p);
}
}
}
专用布尔值isExpired(SessionProfile SessionProfile){
if(sessionProfile==null){
返回false;
}
Long lastAccess=sessionProfile.getValue(Name.lastAccess);
return System.currentTimeMillis()-lastAccess>EXPIRE\u TIME;
}
代码来自我的Web服务。它会每5分钟检测一次用户是否使用AlarmManager。
AlarmManager我不太了解它,但我认为它会占用更多的cpu内存。
为什么?我不这么认为。这将是更好的选择..TimerTask在您的情况下是一个很好的选择。如果我使用AlarmManager,如果我的活动进入暂停状态,或者如果我从应用程序中按下home按钮,会发生什么情况。30分钟后alarm manager会发出警报吗AlarmManager我不太了解它,但我认为它会占用更多的cpu内存。
为什么?我不这么认为。这将是更好的选择..TimerTask在您的情况下是一个很好的选择。如果我使用AlarmManager,如果我的活动进入暂停状态,或者如果我从应用程序中按下home按钮,会发生什么情况。30分钟后,alarm manager会发出警报如果用户进入另一个活动,会发生什么情况。我应该创建新的Handler吗?或者如果屏幕显示关闭,会发生什么情况?我不想要应用程序在用户登录30分钟后注销。如果用户空闲超过30分钟而不触摸屏幕,我只想注销。如果用户转到其他活动,会发生什么情况。我是否应该创建新的Handler或如果屏幕显示消失,会发生什么情况我不希望应用程序在用户登录30分钟后注销。如果用户空闲时间超过30分钟而未触摸屏幕我不希望应用程序在用户登录30分钟后注销。如果用户空闲时间超过30分钟而未触摸屏幕,我只想注销。我不希望应用程序在用户登录30分钟后注销。如果用户停留时间超过30分钟,我只想注销空闲时不触摸屏幕起初我使用处理程序,但我的应用程序经常被强制关闭。因为我必须调用并删除每个事件的处理程序,因为我们无法重置处理程序计时器。最后我使用计时器解决了我的问题。tks sanket。我还有一个疑问。每次单击事件都取消alaram管理器是非常讨厌的(编辑文本单击、父行布局单击、所有按钮单击)。是否有任何方法可以检测用户何时触摸屏幕。我尝试过使用触摸事件、手势等,但它不支持我单击按钮和编辑文本。抱歉,我没有尝试过。如果我得到任何答案,我会告诉你。起初我使用了handler,但。我的应用程序经常被强制关闭。因为我每次都必须调用并删除handlert因为我们无法重置处理程序计时器。最后,我使用计时器解决了我的问题。tks sanket。我还有一个疑问。每次单击事件(编辑文本单击、父行布局单击、所有按钮单击)都取消alaram管理器是非常讨厌的。是否有任何方法可以检测用户何时触摸屏幕。我尝试使用触摸事件、手势等,但它不支持单击按钮和编辑文本。抱歉,我没有尝试过。如果我得到任何答案,我会通知您。