Служба заданий не может выполнить метод

#c# #android #xamarin.forms #xamarin.android #.net-standard

#c# #Android #xamarin.forms #xamarin.android #.net-стандартный

Вопрос:

Я создал службу для проверки уведомлений со своего собственного сервера.

Он отлично работает, когда мое приложение запущено, но он работает не так хорошо, когда мое приложение недавно удалено. Я создал toast, чтобы проверить, запущена ли моя служба stilling или нет, и toast сработал после того, как я завершил работу приложения, но метод, который проверяет сервер, не работает в фоновом режиме.

Я использую xamarin forms и Android service с android oreo, установленным в моем эмуляторе, это мой код:

 public class MyService : JobService
{
   private void DoWork()
   {
      try
      {
        Intent i =new Intent(this.ApplicationContext,typeof(MyReciver));
        i.SetAction("ezz");
        SendBroadcast(i);
      }
      catch
      {
      }
      finally
      {
        StopSelf();
      }

   }

public override bool OnStartJob(JobParameters jobparams)
{
    new Task(() =>
    {
    while (true)
        {
            DoWork();
            Thread.Sleep(5000);
            JobFinished(jobparams, true);
        }
    }).Start();
    return true;

}

public override bool OnStopJob(JobParameters jobparams)
{
    return true;

 }
}
  

И это мой приемник:

 if (intent.Action == "ezz")
    {
        try
        {
            txtmod v = new txtmod();//to get the last id doesn't work in background from shared code
            string cc = v.readtxt();
            string bb = "Last id "   cc;
            Toast.MakeText(context, bb, ToastLength.Short).Show();//run in foreground and stil running in back ground
            PostReq post = new PostReq(1);//doesn't work in background from shared code
        }
        catch { }
    }
  

Обновление: txtmod и postreq

 public class txtmod
{
    string fileName= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "txtronana.txt");
    public string readtxt()
    {
        string text="" ;
        try
        {
            using (StreamReader sr = File.OpenText(fileName))
            {
                string s;
                while ((s = sr.ReadLine()) != null)
                {
                    text = s;
                }
            }
        }
        catch { }
        return text;
    }

    public void savetxt(string postid)
    {
        try
        {
            using (StreamWriter sw = File.CreateText(fileName))
            {
                sw.WriteLineAsync(postid);
            }
        }
        catch { }
    }
}
  

postreq :

 public async void chkpostAsync(int idp)
    {
        Tst:
        try
        {
            CATITEMS x = await getmainitemsasync(1);
            if (x.properties.data != null)
            {
                if (x.properties.data[0].post_id > idp)//d.post_id)
                {
                    for(int f = 0; f <= 9; f  )
                    {
                        if (x.properties.data[f].post_id > idp)
                        {
                            push(x.properties.data[f].post_title, x.properties.data[f].post_category, x.properties.data[f].post_id,f 1 DateTime.Now.Second);

                        }
                        else { break; }
                    }
                }
                if (lastid != x.properties.data[0].post_id)
                {
                    Txtmod.savetxt(x.properties.data[0].post_id.ToString());
                }
            }
            else { goto Tst; }
        }
        catch { }
    }
  

Комментарии:

1. что такое txtmod ?

2. txtmod класс, который получает последний идентификатор из текстового документа из общего кода

3. если проблема в этом коде, не думаете ли вы, что имело бы смысл поделиться им, чтобы мы могли видеть, что он делает?

4. и postreq метод, который проверяет уведомления

5. Хорошо, @ Jason я обновил свой код