Java 匿名类对象:它们看到哪些变量?

Java 匿名类对象:它们看到哪些变量?,java,android,Java,Android,编写Android应用程序时的一种常见情况是:安排一个Runnable,以便在视图上进行一些绘图工作: class MyView extends View { ... private void start() { final ScheduledExecutorService executor = Executors .newScheduledThreadPool(1); mMoverFuture = executor.sch

编写Android应用程序时的一种常见情况是:安排一个
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的限制