应用程序关闭时,Xamarin Android后台服务崩溃

时间:2016-03-29 22:14:32

标签: c# android service xamarin

您好,我想构建一个应用程序,您可以在其中启动一个服务,该服务可以整合运行并创建通知,如果DateTime.Now.Date是,则此服务应该不断证明大于特定日期。

当我执行下面的代码时,会显示通知,但是当我关闭应用程序时,稍后我会得到两次应用程序崩溃的信息,我不知道为什么。

我甚至无法调试代码,因为当应用程序关闭时会发生这种情况....

我希望你能帮助我谢谢!

这是我的代码:

namespace App
{
    [Activity(Label = "App", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate {
                button.Text = string.Format("{0} clicks!", count++);
                StartService(new Intent(this, typeof(backgroudservice)));
            };
        }
    }

    public class backgroudservice : Service
    {
        public override IBinder OnBind(Intent intent)
        {
            return null;
        }

        public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
        {

            newnotification("Title", "Text: ", 0);

            new Task(() => {
                DoWork();
                Thread.Sleep(1000);
            }).Start();

            return StartCommandResult.Sticky;
        }

        public void DoWork()
        {
            if (DateTime.Now.Date > Convert.ToDateTime("2016-03-29").Date)
            {
                cancelnotification(0);
                StopSelf();
            }
        }

        public override void OnDestroy()
        {
            base.OnDestroy();
            cancelnotification(0);
        }

        private void newnotification(string titel, string text, int id)
        {
            Notification.Builder builder = new Notification.Builder(this)
           .SetContentTitle(titel)
           .SetContentText(text)
           .SetSmallIcon(Resource.Drawable.droidlogo_small)
           .SetAutoCancel(false)
           .SetVisibility(NotificationVisibility.Public)
           .SetContentIntent(PendingIntent.GetActivity(this, 0, new Intent(this, typeof(MainActivity)), PendingIntentFlags.OneShot));

            // Build the notification:
            Notification notification = builder.Build();
            notification.Flags = NotificationFlags.NoClear;
            //notification.ContentIntent = new Intent(this,typeof(login));
            // Get the notification manager:
            NotificationManager notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;

            // Publish the notification:
            notificationManager.Notify(id, notification);

        }
        private void cancelnotification(int id)
        {
            NotificationManager notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;
            notificationManager.Cancel(id);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我解决了,我忘记了课堂上方的[服务],现在它有效了!

import pandas as pd
import numpy as np
df = pd.DataFrame({"a": np.random.randn(10)})
df.sort_values('a',inplace=True)
# bin according to cut
df["bins"] = pd.cut(df.a, np.linspace(-2,2,6))
df

答案 1 :(得分:0)

您可以尝试将呼叫转移到服务cancelnotification中的OnDestroy,然后再拨打基本方法,即:

public override void OnDestroy()
    {
        cancelnotification(0);
        base.OnDestroy();
    }