我正在设计一个演员,该演员应该安排向自己发送消息。
我注意到至少有两种方法可以做到。
我想了解选择合适的商品的区别。
第一种是akka.actor.Timers的一种方法:
def startSingleTimer(key: Any, msg: Any, timeout: FiniteDuration): Unit
第二种是actor上下文系统的调度程序的常见方法:
final def scheduleOnce(
delay: FiniteDuration,
receiver: ActorRef,
message: Any)(implicit executor: ExecutionContext,
sender: ActorRef = Actor.noSender): Cancellable
问题:
scheduleOnce
方法是个好主意吗?答案 0 :(得分:4)
akka.actor.Timers.startSingleTimer
final HorizontalScrollView s = (HorizontalScrollView) findViewById(R.id.hscrollview);
s.post(new Runnable() {
public void run() {
s.fullScroll(HorizontalScrollView.FOCUS_LEFT);
s.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int padding = getResources().getDisplayMetrics().widthPixels / 2;
s.setPadding(padding, 0, padding, 0);
s.setClipToPadding(false);
}
});
}
});
跟踪活动计时器context.system.scheduler.scheduleOnce
key
需要显式ActorRef
,可选receiver
则需要sender
因此,如果您只需要自己安排消息,请选择akka.actor.Cancellable
将actor上下文传递给scheduleOnce方法是一个好主意吗?
不确定要以哪种方式进行操作,但通常必须仅在akka.actor.Timers
方法内使用actor上下文,并且不要将其传递给receive
的回调方法中既不使用的actor。