Служба заданий не может выполнить метод - PullRequest
0 голосов
/ 13 марта 2019

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

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

Я использую формы xamarin и службу Android с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 { }
    }
...