问题
I need to run a method every 5 seconds using Mono for Android. Is there a scheduled timer in Android? I have tried this code, however, it fails to start:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Glass.Core.Interfaces;
using Glass.Core;
using Java.Util;
namespace Glass.UI.AN
{
[Application(Label = "Glass", Icon = "@drawable/icon")]
public class GlassApplication : Application
{
Context context;
public GlassApplication (IntPtr handle, JniHandleOwnership transfer)
: base(handle, transfer)
{
this.context = BaseContext;
}
public override void OnCreate ()
{
base.OnCreate ();
Timer timer = new Timer ();
timer.ScheduleAtFixedRate (new CustomTimerTask(context), new Date(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute), 5000);
}
}
public class CustomTimerTask: TimerTask
{
Context context;
public CustomTimerTask(Context context)
{
this.context = context;
}
public override void Run ()
{
GlassWebServiceProvider p = new GlassWebServiceProvider (context);
p.SendCardReaders ();
}
}
}
回答1:
Why not just use System.Timers.Timer?
var timer = new Timer();
//What to do when the time elapses
timer.Elapsed += (sender, args) => FireTheMissiles();
//How often (5 sec)
timer.Interval = 5000;
//Start it!
timer.Enabled = true;
private void FireTheMissiles()
{
//But I'm le tired...
}
Another approach to make a new Task or Thread and let it sleep for 5 seconds every time:
Task.Factory.StartNew(() =>
{
while (true)
{
// do some stuff
Thread.Sleep(TimeSpan.FromSeconds(5));
}
});
ThreadPool.QueueUserWorkItem(thread =>
{
while (true)
{
// do some stuff
Thread.Sleep(TimeSpan.FromSeconds(5));
}
});
回答2:
I had the same problem, I had to start a service after a certain time.
DateTime dt = DateTime.Now;
t1 = new System.Timers.Timer(200);
t1.Elapsed += new ElapsedEventHandler(OnTimeEvent);
t1.Interval = 4000;
t1.Enabled = true;
t1.Start();
}
private void OnTimeEvent(object source, ElapsedEventArgs e)
{
RunOnUiThread(delegate
{
//this is my service which i was starting at every 4 seconds
StartService(new Intent(this, typeof(ServiceClass)));
});
}
来源:https://stackoverflow.com/questions/16342662/android-scheduled-timer-mono-for-android-or-java