如何在我的应用程序中正确运行定时进程,当应用程序正在使用或在后台时,它将在停止时启动?

Ala*_*an2 5 xamarin xamarin.forms

我有一个应用程序启动并每分钟运行一次数据库的后台检查.以下是此代码.

我得到了我认为是内存泄漏的东西,我正在查看循环代码的所有区域.

是否有可能将此代码留在循环状态并导致内存泄漏,或者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();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

小智 2

App 类是代表跨平台移动应用程序的类,即使您的“MainPage”没有运行,它也在运行,所以我认为您需要在主页中使用OnAppearing和方法(a )。OnDisappearing:ContentPage

也许是这样的:

protected override void OnAppearing()
{
   stopWatch.Start();
   base.OnAppearing();
}
Run Code Online (Sandbox Code Playgroud)

和,

protected override void OnDisappearing()
{
 stopWatch.Reset();
 base.OnDisappearing();
}
Run Code Online (Sandbox Code Playgroud)

我希望这会有所帮助,马布鲁克。