Gibt es in Android (Java) einen Mechanismus zum Beibehalten des logischen Kontexts, ähnlich wie bei .NET ExecutionContext
? Mit logischem Kontext meine ich, dass Informationen, die einmal beibehalten wurden, später über den gesamten Ausführungs-Thread zugänglich sind, was bedeutet, dass sie Async-Aufrufe überleben werden. Zum Beispiel:Flussausführung/logischer Kontext bei asynchronen Aufrufen
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);
Um zu klären, weiß ich über Verschlüsse. Was ich jedoch brauche, ist ein automatischer Mechanismus, bei dem ich nicht den Kontext erfassen muss, den ich jedes Mal bestehen möchte. Um es weiter zu verdeutlichen, ein bloßes statisches Feld wird auch nicht funktionieren, da ich unterschiedliche logische Ausführungsabläufe unterschiedliche Kontexte haben möchte (die beginnen würden, wenn ich LogicalContext.set
anrufe und [durch Kopieren] durch irgendeinen von da an ausgeführten asynchronen Anruf fließe).
In C# würde es so aussehen:
CallContext.LogicalSetData("foo", "bar");
await Task.Run(() => Console.WriteLine(CallContext.LogicalGetData("foo")));
Wenn das nicht möglich ist, würde ich für einen speziellen Fall dieses Mechanismus regeln - festzustellen, ob der aktuelle logische Fluss/Ausführungs-Thread von einem IntentService
entstanden.
genau das Gegenteil von http://stackoverflow.com/questions/5754281/inheritable-thread-local-in-net :) –