2016-03-29 22 views
1

こんにちは、私はあなたがintependenlyを実行し、通知を作成するサービスを開始することができるアプリを構築したいと考えています。今は、日付が特定の日付よりも大きい。Xamarin Androidのバックグラウンドサービスがクラッシュするアプリケーションが終了するときにクラッシュする

私は以下のコードを実行すると通知が表示されますが、アプリケーションを終了すると数秒後にアプリがクラッシュしたという情報が2回取得され、理由はわかりません。

アプリケーションが閉じているときに、このanlyが起こるので、私もコードをデバッグカント....

は、私はあなたが私に感謝を助けることを願って!ここで

は私のコードです:

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); 
     } 
    } 
} 
+0

タスクマネージャを使用してアプリケーションを強制終了する場合。サービスを切断する可能性が最も高いです。 –

答えて

0

あなたは基本メソッドの呼び出しの前に、あなたのサービスのOnDestroycancelnotificationへの呼び出しを移動してみてください、すなわち:

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

私は解決それは、私のクラスの上の[サービス]を忘れてしまった、今それは動作します!

[Service] 
    public class backgroudservice : Service 
    { 
    ... 
    } 
+0

男も同じ問題を抱えています。あなたがマニフェストを分かち合ったら –

関連する問題