7
我有一個應用程序,每分鐘啓動並運行數據庫的後臺檢查。以下是此代碼。如何在我的應用程序中正確運行定時過程,將在應用程序正在使用或在後臺停止時開始停止?
我得到了我認爲是內存泄漏的問題,並且正在查看循環代碼的所有區域。
有沒有可能這個代碼可以留在循環狀態,並有助於內存泄漏,或者是onSleep和onResume編碼100%可靠的方式來正確停止和啓動計時器循環的方式?
請注意,我只想讓代碼的定時部分在應用程序正在使用時在前臺運行一分鐘。
namespace Japanese
{
public partial class App : Application
{
private static Stopwatch stopWatch = new Stopwatch();
public App()
{
InitializeComponent();
MainPage = new Japanese.MainPage();
}
protected override void OnStart()
{
App.DB.InitData();
if (!stopWatch.IsRunning)
stopWatch.Start();
Device.StartTimer(new TimeSpan(0, 0, 1),() =>
{
if (stopWatch.IsRunning && stopWatch.Elapsed.Minutes >= defaultTimespan)
{
Debug.WriteLine("Checking database");
PointChecker.CheckScore();
stopWatch.Restart();
}
return true;
});
}
protected override void OnSleep()
{
stopWatch.Reset();
}
protected override void OnResume()
{
stopWatch.Start();
}
}
}
您需要停止由Device.StartTimer啓動的計時器。爲什麼你使用秒錶呢? –
儘管我不清楚使用計時器和秒錶的設計,但除PointChecker.CheckScore之外,沒有看到任何可能導致內存泄漏的內容。我跑了一小時,並保持運行 –
當你關閉在iOS上的應用程序,這將不再運行。你的應用程序可以嗎?我認爲你應該閱讀這個[論壇帖子](https://forums.xamarin.com/discussion/11939/run-background-task-every-x-amount-of-time)關於後臺任務 – Harry