在您的应用未处于活动/运行状态一段时间后执行操作

时间:2018-04-02 06:33:42

标签: android

我在应用程序中加载了设备上的一些敏感数据。它可以在应用程序的会话/多次使用之间重复使用,并在不使用/打开/活动时清除。

因此应用程序未处于活动/正在运行状态。有通知显示敏感信息仍在内存中。

但我希望在一段时间后让用户选择清除此数据。

所以我的问题是如何在一定时间后运行一些代码?

2 个答案:

答案 0 :(得分:1)

您可以使用AlarmManager计划警报并从BroadcastReceiver / Service运行您的代码。警报将触发您的应用程序已停止或活着的天气。 (如果已经死了就会被唤醒)

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);

您可以使用此方法注册一次性警报。因此,如果您希望警报在5分钟内触发,delayMillis值应为5 * 1000 * 60

void registerOneTimeAlarm(PendingIntent pendingIntent, long delayMillis) {
    int SDK_INT = Build.VERSION.SDK_INT;
    long timeInMillis = System.currentTimeMillis() + delayMillis;

    if (SDK_INT < Build.VERSION_CODES.KITKAT) {
        alarmManager.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
    } else if (SDK_INT < Build.VERSION_CODES.M) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
    } else {
        alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
    }
}

假设您将使用接收器,它将如下所示:

public class AlarmReceiver
    extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
      // Your code here
    }
}

不要忘记在Manifest中添加它:

<receiver android:name="your.package.AlarmReceiver"/>

重要 设备重启时,已注册的告警被清除,需要在设备启动后重新注册告警。 (如果这是你真正需要的)

答案 1 :(得分:-1)

你可以试试这个

new Handler().postDelayed(new Runnable() {
@Override
public void run() {

    //Actions to be performed 

}
 }, TIME_OF_DELAY);