如何安排任务上android

标签: Java Android
发布时间: 2017/3/19 14:03:48
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个数据库,其中我需要删除在某一天,怎么可以执行此任务吗?发现了这个︰

timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

    synchronized public void run() {

        \\ here your todo;
        }

    }}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));

但我不确定如果它将"保存任务"直到到期日。谢谢你

解决方法 1:

AlarmManager类使调度会在将来运行在设定点的重复警报。AlarmManager给出了 PendingIntent 火每当预定报警。当触发警报时,注册 Intent 广播的 Android 系统,启动目标 application 如果它不在运行。

创建一个从继承的类 BroadcastReceiver 。在 onReceive 方法中,这时调用 BroadcastReceiver 接收 Intent 广播,我们将设置运行我们的任务的代码。

AlarmReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // For our recurring task, we'll just display a message
        Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show();

    }

}

然后,我们需要注册 BroadcastReceivermanifest 文件。声明在 AlarmReceiver manifest 文件。

<application>
    .
    .
    <receiver android:name=".AlarmReceiver"></receiver>
    .
    .
</application>

在您调用 Activity 包括以下实例变量。

private PendingIntent pendingIntent;
private AlarmManager manager;

在 onCreate() 中我们创建 Intent ,我们广播的接收器类引用,并使用它在我们 PendingIntent

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Retrieve a PendingIntent that will perform a broadcast
    Intent alarmIntent = new Intent(this, AlarmReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
}

我们然后包括将设置重复性闹铃的方法。一旦进行了设置,报警将火后每个 X time ,这里我们把 10 秒你可以简单地计算这来触发它的每一天的示例。

public void startAlarm(View view) {
    manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    int interval = 10000;

    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
    Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
}

接下来,我们会同时设立 cancelAlarm() 方法停止报警,如果需要的话。

public void cancelAlarm(View view) {
    if (manager != null) {
        manager.cancel(pendingIntent);
        Toast.makeText(this, "Alarm Canceled", Toast.LENGTH_SHORT).show();
    }
}
官方微信
官方QQ群
31647020