【发布时间】:2017-01-19 08:32:34
【问题描述】:
第一部分
您好,我正在尝试更改以下代码以使用 Callable 而不是 可运行,因为我希望提供给 Executor 的函数返回 数据。
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 中找到了示例,但是当我尝试在 C# 中复制代码时 缺少主类 Callable 并且只有 ICallable 我不能 实例化。不幸的是,Xamarin 文档也提供了 Java 示例!
如果有人可以提供帮助,我将不胜感激!
第二部分
完整的设计理念是一个服务,它有这个嵌入式执行器来运行 任务顺序。顺序执行至关重要,因为服务 将与蓝牙接口有持续的套接字连接,并且只有 一次可以处理一个蓝牙请求(任务)。最初我想使用 IntentService 但我希望该服务在整个生命周期内都保持活跃 应用程序,否则对于每个蓝牙请求,套接字都必须 重新连接。
对于设计方法的任何建议也将不胜感激!
【问题讨论】:
标签: c# android xamarin callable executor