Android(Java)中是否存在保留逻辑上下文的机制,类似于.NET ExecutionContext
?通过逻辑上下文,我指的是一旦保留的信息,以后可以在整个逻辑执行线程中访问,这意味着它将在异步调用中存活。例如:
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
System.out.print(LogicalContext.get("foo")); //should print "bar"
}
};
LogicalContext.set("foo", "bar");
handler.postDelayed(r, 1000);
澄清一下,我知道关闭。然而,我需要的是一种自动机制,它不需要我捕获我想要每次传递的上下文。为了进一步说明,一个纯粹的静态字段也不会这样做,因为我希望不同的执行逻辑线程具有不同的上下文(当我调用LogicalContext.set
并且[基本上通过复制]流过任何上下文时从那时开始的异步调用。)
在C#中,它看起来像这样:
CallContext.LogicalSetData("foo", "bar");
await Task.Run(() => Console.WriteLine(CallContext.LogicalGetData("foo")));
如果那是不可能的,我会解决这种机制的特殊情况 - 确定当前的逻辑流程/执行线程是否来自IntentService
。
答案 0 :(得分:1)
您可以使用InheritableThreadLocal<T>
,类似于.NET AsyncLocal<T>
:
Handler handler = new Handler();
final InheritableThreadLocal<String> foo = new InheritableThreadLocal<String>();
final Runnable r = new Runnable() {
public void run() {
System.out.print(foo.get()); // prints "Bar"
}
};
foo.set("Bar");
handler.postDelayed(r, 1);