问题描述
我正在使用此代码,但我永远看不到 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 的以下属性对进程外服务很重要:
-
Exported – 此属性必须设置为 true 以允许其他应用程序与服务交互。此属性的默认值为 false。
-
Process – 必须设置此属性。用于指定服务将在其中运行的进程的名称。
-
IsolatedProcess – 此属性将启用额外的安全性,告诉 Android 在隔离的沙箱中运行该服务,并具有与系统其余部分交互的最低权限。
-
权限 – 可以通过指定客户端必须请求(并被授予)的权限来控制客户端对服务的访问。
要运行服务自己的进程,必须将 ServiceAttribute 上的 Process 属性设置为服务的名称。要与外部应用程序交互,Exported 属性应设置为 true。如果 Exported 为 false,则只有在同一 APK(即同一应用)中并在同一进程中运行的客户端才能与服务交互。
有关创建在单独进程中运行的服务的更多详细信息,请查看: