Android:每10秒执行一次(完全)

时间:2016-09-20 09:34:33

标签: android

我们有一个应用程序,应该每隔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; 秒处理一个任务。这应该或多或少精确,这意味着101秒的差异为2,但不是OK秒或更长的差距。

无论应用是开放的,前景还是后台,这都应该有效。

我们通过20实现此功能,但它无法正常运行。如果未插入智能手机并且它在后台运行,则执行中存在间隙。

对于AlarmManager,我们会不时出现差距(大约30秒),Android 4.3.我们的差距较小,但差距大约为Android 5.x5分钟!

我认为必须有一种方法来实现这一点,闹钟也是可能的,而且确切。

关于应用程序的更多信息:它在服务中工作,并且实现了广播接收器。这意味着如果我擦除应用程序或重新启动应用程序,服务将重新启动。这工作正常。唯一的问题是10第二项任务。

任何提示?闹钟是如何实现的?哪个电话,API?

到目前为止,我尝试过不同的方法但没有成功。

由于 汉斯

3 个答案:

答案 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秒完成一次任务。