https://bugzilla.novell.com/show_bug.cgi?id=665345
https://bugzilla.novell.com/show_bug.cgi?id=665345#c0 Summary: Services: Some suggestions to improve the API and .netify it Classification: Mono Product: MonoDroid Version: SVN Platform: Macintosh OS/Version: Mac OS X 10.6 Status: NEW Severity: Enhancement Priority: P5 - None Component: Class Libraries AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10 So, for services there's the concept of binding a service to an activity on android, to get a reference to the service that you can use directly from the activity. It all works right now as is, but I've created a couple of simple classes that would really make it a lot easier and less verbose to work with. using System; using Android.OS; using Android.Service; using Android.App; using Android.Content; using Android.Runtime; namespace Chapter13Threading { public class ServiceConnection<TService, TBinder> : Java.Lang.Object, IServiceConnection where TService : Service where TBinder : ServiceBinder<TService> { public event Action<TService> Connected; public event Action Disconnected; public void OnServiceConnected(ComponentName className, IBinder serviceBinder) { if (this.Connected != null) this.Connected((serviceBinder as ServiceBinder<TService>).GetService()); } public void OnServiceDisconnected(ComponentName className) { if (this.Disconnected != null) this.Disconnected(); } } public class ServiceBinder<TService> : Binder where TService : Service { TService _service; public ServiceBinder(TService service) { this._service = service; } public TService GetService() { return _service; } } } So, in your service you'd create a new ServiceBinder<MyService>(); instance and return that in your OnBind overload for your Service. Simple. In your Activity you'd create a new ServiceConnection<MyService, ServiceBinder<MyService>>(); instance, and subscribe to its Connected and Disconnected events: myServiceConnection.Connected += delegate(MyService serviceInstance) { this.ServiceInstance = serviceInstance; this.button.Click += delegate { this.ServiceInstance.SomeServiceMethod(); }; }; myServiceConnection.Disconnected += delegate { this.ServiceInstance = null; }; The idea here is you get an event for when your reference to the server is valid (after your connection is connected) at which point you can use your reference to the service. This is way less verbose than the way you have to do it now, which is basically to create a class implementing IServiceConnection in your activity, as well as a subclassing Binder in your service. These are just helper classes that would be optional to use, but make things a bit quicker for us. Like? Dislike? Reproducible: Always -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
