2016-07-28 32 views
-2

我已经创建了一个应用程序。我想在用户退出应用程序或应用程序在后台运行一段时间后自动从应用程序注销。我创建了计时器,但它不起作用,因为当应用程序进入onStop()计时器也成为停止。我应该为这个问题做些什么?Android注销计时器

+0

你试过了什么? –

+0

我开发了一个库来照顾这种类型的用例,请随时看一下 https://github.com/jose96043/TimezOut – joseporto

回答

0

使所有的Activities扩展一个BaseActivity。然后在这个BaseActivity声明pausedMillis paramater:

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分钟后台。快乐编码:)

+0

对我来说很好用 – Malik

0

您需要提供服务才能注销,并使用AlarmManager以及该服务的PendingIntent在特定时间段后启动。以下是一个示例代码:

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