我们有一个应用程序,应该每隔select max(person_sid) from dim_person
where [Effective_To] <='2015-10-01'
group by person_id_number
declare @sql nvarchar(50), @dt datetime;
set @dt = '2015-10-01';
set @sql = N'SELECT max(person_sid) FROM dim_person WHERE effective_to <= @date';
exec sp_executesql @sql, N'@date datetime',@dt;
秒处理一个任务。这应该或多或少精确,这意味着10
或1
秒的差异为2
,但不是OK
秒或更长的差距。
无论应用是开放的,前景还是后台,这都应该有效。
我们通过20
实现此功能,但它无法正常运行。如果未插入智能手机并且它在后台运行,则执行中存在间隙。
对于AlarmManager
,我们会不时出现差距(大约30秒),Android 4.3.
我们的差距较小,但差距大约为Android 5.x
或5
分钟!
我认为必须有一种方法来实现这一点,闹钟也是可能的,而且确切。
关于应用程序的更多信息:它在服务中工作,并且实现了广播接收器。这意味着如果我擦除应用程序或重新启动应用程序,服务将重新启动。这工作正常。唯一的问题是10
第二项任务。
任何提示?闹钟是如何实现的?哪个电话,API?
到目前为止,我尝试过不同的方法但没有成功。
由于 汉斯
答案 0 :(得分:1)
public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 10000); //execute in every 10000 ms
}
答案 1 :(得分:0)
你可以使用handler和runnable来实现,我认为这是Android首选..
public class ActivityMain extends Activity
{
private Handler mainHandler = new Handler();
private Runnable backgroundTask = new Runnable() {
@Override
public void run() {
//do your background task
mainHandler.postDelayed(this, 10000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainHandler.postDelayed(backgroundTask, 10000);
}
}
答案 2 :(得分:-1)
使用&#34; AlarmManager&#34;用&#34;广播接收器&#34;和&#34;服务&#34;。这三个组件将满足您的要求。
使用Alarm Manager生成广播接收器,并从BroadcastReceiver启动一个服务,您可以在其中放置所需的逻辑代码,以便每10秒完成一次任务。