OK,
매우 쉽고 멋지다.
나는 내가 평신도의 설명 CSHARP 코너는 그들이 그것을 묘사하는 방법 난 그냥 원하는에 아주 가까이 내가 그들의 예를 사용하지 않는 나쁜 필요로 할 때 배의 여기 c# corner
많은이를 파악하는 데 필요한 정보를 가지고 당신을 돕고 당신은 3 개 클래스 1. 서비스 자체 (우리가 서비스를 호출거야) 2. 서비스 바인더 (serviceBinder) 3. 서비스 연결 (serviceConnection)
필요 그것을
을 사용하는 방법을 이해하는
내가 보여 줄께. 내 다음은 (이 작동), 나는 바운드 서비스를 설계 했으므로 서비스 대신 이름에 boundService가 표시됩니다. 그러나이 작업을 수행 한 후 시작 서비스가 정확히 동일한 방식으로 작동한다는 것을 알게되었습니다. 클래스를 다르게 시작하면 클래스가 동일합니다.
android.app가 필요합니다.
그래서 먼저 우리는 확장 서비스를 필요 (중요) 서비스를
using Android.App
[Service]
class MqttBoundService : Service
{
private MqttBoundServiceBinder binder;
public override void OnCreate()
{
base.OnCreate();
}
public override IBinder OnBind(Intent intent)
{
binder = new MqttBoundServiceBinder(this);
Toast.MakeText(this, "OnBind() method start from BoundService", ToastLength.Long).Show();
Toast.MakeText(this, "Bound Service is started", ToastLength.Long).Show();
return binder;
}
public override bool OnUnbind(Intent intent)
{
Toast.MakeText(this, "OnUnBind() Method Called from BoundService.cs", ToastLength.Long).Show();
return base.OnUnbind(intent);
}
public override void OnDestroy()
{
Toast.MakeText(this, "Bound Service Destroyed", ToastLength.Long).Show();
base.OnDestroy();
}
토스트가 너무 그것을 원하지 않았을 때 서비스가 파괴지고 경우에 일어나는 뭐죠 너무 당신이 알고있다. 좋아
이제 우리는 서비스 바인더 (중요 바인더를 확장)
class MqttBoundServiceBinder : Binder
{
MqttBoundService service;
public MqttBoundServiceBinder(MqttBoundService service)
{
this.service = service;
}
}
지금 우리가 연결이 필요하고 무거운이 일어나는 곳이 필요합니다. 나는 아직 새로운데, 당신이 활동 라이프 사이클보다 오래 살 필요가있는 방법을 여기에 넣으려는 것처럼 보입니다.
class MqttBoundServiceConnection : Java.Lang.Object, IServiceConnection
{
public Connection connect { get; private set; }
public void OnServiceConnected(ComponentName name, IBinder service)
{
Console.WriteLine("OnServiceConnected() Method called");
}
public void OnServiceDisconnected(ComponentName name)
{
Console.WriteLine("OnServiceDisConnected() Method called");
}
public Connection Connect()
{
connect = new Connection(Utility.data, Utility.cdata);
return connect;
}
}
Connect에서 Connect 개체를 인스턴스화하면 여기서 매개 변수는 보안 인증서이지만 중요한 것은 아닙니다. 나는 또한 재산을 가지고있다. 세트; 내 객체에 설정하면 내 활동의 OnRestart() 및 OnResume() 함수에서 mqtt 연결에 액세스 할 수 있습니다.
저는이 작업을 수행하기 전에 안드로이드가 리소스를 전환하는 데 문제가있었습니다. 지금은 발생하지 않습니다.
가 중요한 확실하지만 내 OnRestart()는 아니 나는 그것이 나를 위해 OK 나는이 것을 의미 바운드 서비스를하고있는 중이 야 시작하는 방법을 알려하는 방법을 잊었 아
if (serviceConnection.connect == null)
{
DoBindService();
connect = serviceConnection.Connect();
}
else
{
connect = serviceConnection.connect;
}
모든 활동 후 (또는 클라이언트)가 파괴되면 서비스가 파괴됩니다.
그래서 바인딩 된 서비스를 시작하려면 먼저 연결의 클래스 수준 변수를 만드십시오 (활동에서 - 위의 OnStart()에서 참조). 이렇게 또 한 번 당신은 추가 활동)
MqttBoundServiceConnection serviceConnection = new mqttBoundServiceConnection();
그런 다음 우리가 한 OnCreate에서 DoBindService
private void DoBindService()
{
var BoundServiceIntent = new Intent(this, typeof(MqttBoundService));
BindService(BoundServiceIntent, serviceConnection, Bind.AutoCreate);
}
(라는 활동하는 방법이 필요합니다 (정말 멋진)이 클래스의 메소드를 호출 할 수
DoBindService();
은 내가 :)
그것을 파악하면이 도움말 누군가가 나에게 도움이 희망