【问题标题】:Android Logout timer [closed]Android注销计时器[关闭]
【发布时间】:2016-12-02 09:53:50
【问题描述】:
我制作了一个应用程序。我想在用户退出应用程序或在后台运行的应用程序的特定时间段后自动从应用程序注销。我已经创建了计时器,但它不起作用,因为当应用程序进入 onStop() 时,计时器也会停止。这个问题我该怎么办?
【问题讨论】:
标签:
android
android-studio
logout
android-timer
【解决方案1】:
让你所有的Activities 扩展一个BaseActivity。然后在这个BaseActivity 中声明 pausedMillis 参数:
private long pausedMillis;
之后重写onStop 方法:
@Override
protected void onStop() {
super.onStop();
pausedMillis = Calendar.getInstance().getTimeInMillis();
}
最后重写onResume方法:
@Override
public void onResume(){
super.onResume();
try {
long currentMillis = Calendar.getInstance().getTimeInMillis();
if ( !(this instanceof LoginActivity) && currentMillis - pausedMillis > 1000 * 60 * 3 ) {
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Toast.makeText(BaseActivity.this, getString(R.string.logout_string), Toast.LENGTH_LONG).show();
}
} catch (Exception e){
e.printStackTrace();
}
}
如果您的应用在后台运行超过 3 分钟,这将注销您。快乐编码:)
【解决方案2】:
您需要创建一个服务来注销并使用带有 PendingIntent 的 AlarmManager 以便该服务在特定时间段后启动。这是一个示例代码:
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent m_intent = new Intent(this, YourService.class);
PendingIntent pi = PendingIntent.getService(this, 2, m_intent, 0);
alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timePeriod, pi);
将注销代码放入YourService。