Часть I
Привет, я пытаюсь изменить следующий фрагмент кода, чтобы использовать Callable вместо Runnable, потому что я хочу, чтобы функции, которые передаются исполнителю, возвращали данные.
using Android.App;
using Android.OS;
using Android.Widget;
using Java.Util.Concurrent;
using Java.Lang;
namespace ServiceExecutor {
[Activity(Label = "SomeActivity")]
public class SomeActivity : Activity {
TextView tv1;
Runnable r;
static IExecutorService exe = Executors.NewSingleThreadExecutor();
protected override void OnCreate(Bundle savedInstanceState) {
base.OnCreate(savedInstanceState);
tv1 = FindViewById<TextView>(Resource.Id.textView1);
for (int i = 0; i < 4; i++) {
r = new Runnable(() => function(i));
exe.Submit(r);
}
}
public void function(int i) {
RunOnUiThread(() => tv1.Text += "function " + i.ToString() + "\r\n");
Thread.Sleep(2000);
}
}
}
Я нашел примеры на Java, но когда я пытаюсь воспроизвести код на С#, основной класс Callable отсутствует, и есть только ICallable, экземпляр которого я не могу создать. К сожалению, документация Xamarin также содержит примеры Java!
Я был бы признателен, если бы кто-нибудь мог помочь!
Часть II
Полная идея дизайна — это служба, в которой есть встроенный исполнитель для последовательного запуска задач. Последовательное выполнение имеет решающее значение, поскольку служба будет иметь постоянное соединение через сокет с интерфейсом Bluetooth, и одновременно может обрабатываться только один запрос (задача) Bluetooth. Изначально я хотел использовать IntentService, но я хочу, чтобы сервис был активен на протяжении всей жизни приложения, иначе для каждого запроса bluetooth сокету придется переподключаться.
Любые советы по подходу к дизайну также будут оценены!