Xamarin 在不同进程问题中分离服务

问题描述

我正在使用此代码,但我永远看不到 Toast 文本,也没有任何例外。我想在不同的进程中运行我的服务。

我的服务类:

[Service(Name = "com.test",Enabled = true,Process = ":test",Label = "test")]
    class Seperate : Service
    {
        public override IBinder OnBind(Intent intent)
        {
            return null;
        }
        public override void OnStart(Intent intent,int startId)
        {
            Toast.MakeText(this,"SERVICEEE",ToastLength.Long).Show();
        }
        public override void OnCreate()
        {
            Toast.MakeText(this,ToastLength.Long).Show();
        }
        [return: GeneratedEnum]
        public override StartCommandResult OnStartCommand(Intent intent,[GeneratedEnum] StartCommandFlags flags,ToastLength.Long).Show();
            return StartCommandResult.Sticky;
        }
    }

我正在尝试使用此代码运行,但它不起作用;我永远看不到吐司文字

在 MainActivity 类中,onCreate() 方法

Intent i = new Intent(this,typeof(Seperate));
            StartService(i);

解决方法

关于创建在单独进程中运行的服务,ServiceAttribute 的以下属性对进程外服务很重要:

  1. Exported – 此属性必须设置为 true 以允许其他应用程序与服务交互。此属性的默认值为 false。

  2. Process – 必须设置此属性。用于指定服务将在其中运行的进程的名称。

  3. IsolatedProcess – 此属性将启用额外的安全性,告诉 Android 在隔离的沙箱中运行该服务,并具有与系统其余部分交互的最低权限。

  4. 权限 – 可以通过指定客户端必须请求(并被授予)的权限来控制客户端对服务的访问。

要运行服务自己的进程,必须将 ServiceAttribute 上的 Process 属性设置为服务的名称。要与外部应用程序交互,Exported 属性应设置为 true。如果 Exported 为 false,则只有在同一 APK(即同一应用)中并在同一进程中运行的客户端才能与服务交互。

有关创建在单独进程中运行的服务的更多详细信息,请查看:

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/services/out-of-process-services#create-a-service-that-runs-in-a-separate-process

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...