Java 匿名类对象:它们看到哪些变量?
编写Android应用程序时的一种常见情况是:安排一个Java 匿名类对象:它们看到哪些变量?,java,android,Java,Android,编写Android应用程序时的一种常见情况是:安排一个Runnable,以便在视图上进行一些绘图工作: class MyView extends View { ... private void start() { final ScheduledExecutorService executor = Executors .newScheduledThreadPool(1); mMoverFuture = executor.sch
Runnable
,以便在视图上进行一些绘图工作:
class MyView extends View {
...
private void start() {
final ScheduledExecutorService executor = Executors
.newScheduledThreadPool(1);
mMoverFuture = executor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
if (isOutOfView()) {
mMoverFuture.cancel(false);
}
postInvalidate(); // Can I do this?
}
}, 0, REFRESH_RATE, TimeUnit.MILLISECONDS);
}
...
}
特别是,我不确定是否可以从线程的run()
调用MyView
s方法postInvalidate()
。判断匿名类对象可以使用哪些变量和方法时,应该遵循哪些规则?没有规则。您可以从父类调用任何变量。在您的情况下,您需要记住的就是。如果这对你来说很重要的话,请注意这一点。没有规则。您可以从父类调用任何变量。在您的情况下,您需要记住的就是。如果这对您很重要,请注意这一点。根据Java规则,InnerClass的实例可以直接访问其封闭实例的方法和字段。如果你有疑问,可以查一查
反过来,方法postInvalidate专门设计为在UI线程之外调用,因此它也不会违反Android View的限制。根据Java规则,InnerClass的实例可以直接访问其封闭实例的方法和字段。如果你有疑问,可以查一查
方法postInvalidate则专门设计为在UI线程之外调用,因此它也不会违反Android View的限制