Android服务-应用程序关闭后无法停止

时间:2019-11-09 18:37:05

标签: c# android xamarin

我的问题如下。我创建了即使在应用程序关闭后仍能赢的android服务。当应用程序处于活动状态时,我可以扫描该服务,并且可以看到它正在运行,并且可以将其停止。当我完全关闭活动并启动应用程序时,我再次扫描活动服务,但在列表中找不到它。因此,如何在程序重新启动后停止服务,以便我可以指示服务是否仍在后台运行。我使用下面的方法检查服务。

public void IsServiceRunning()
    {
        ActivityManager activityManager = (ActivityManager)GetSystemService(Context.ActivityService);
        var list = activityManager.GetRunningServices(int.MaxValue);

        foreach(var item in list)
        {

            Toast.MakeText(ApplicationContext, item.Service.ClassName + " " + item.Started + " " + item.Service.Class, ToastLength.Short).Show();
            Log.Debug("++++++++++++++++++++++++++++++++++ ",  item.Service.ClassName + " " + item.Started + " " + item.Service.Class);
            if ( item.Service.ClassName.Contains("MyService"))
            {
                MessagingCenter.Send<string>("true", "CheckRunningService");
                //Toast.MakeText(ApplicationContext, item.Service.ShortClassName.ToString(), ToastLength.Short).Show();
                return;
            }



        }


        MessagingCenter.Send<string>("false", "CheckRunningService");

    }

服务代码

class MyService : Service 
{

    SmsBroadcastRceiver sms;
    public override void OnCreate()
    {
        base.OnCreate();

    }

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

        //Toast.MakeText(this, "MyService Started", ToastLength.Long).Show();
        sms = new SmsBroadcastRceiver();
        RegisterReceiver(sms, new IntentFilter("SMS_RECEIVED"));


        return StartCommandResult.NotSticky;

    }


    public override void OnDestroy()
    {
        UnregisterReceiver(sms);
        StopSelf();

        //Toast.MakeText(this, "MyService Stopped", ToastLength.Long).Show();

        base.OnDestroy();

    }

    public override IBinder OnBind(Intent intent)
    {

        return null;
    }


}

2 个答案:

答案 0 :(得分:0)

尝试在清单文件中声明的服务中放入android:stopWithTask ='true' 在服务等级 覆盖onTaskRemoved方法并检查您是否还可以在此处删除位置侦听器的更新以停止位置更新

希望对您有帮助

答案 1 :(得分:0)

我认为我发现了为什么一旦我的应用程序停止我就找不到它的原因。如文档所述:

getRunningServices(int maxNum) 从API级别26开始不推荐使用此方法。从Build.VERSION_CODES.O开始,该方法不再对第三方应用程序可用。为了向后兼容,它仍将返回调用者自己的服务。