java - 安卓和Java : use of runnable

标签 java android multithreading instance anonymous-class

我读到在 Java 中接口(interface)不能被实例化 (in the documentation, Interfaces)。 Runnable,顾名思义是一个应该由某个类实现的接口(interface)。但是在我的一个 Android 应用程序的以下代码中,我看到使用了一个空的构造函数 - Runnable()...(我不确定它是否是一个构造函数),并且已经创建了一个实例 - getStatus。

final Runnable getStatus = new Runnable()
{
    public void run()
    {
        TextView uat = (TextView) findViewById(R.id.useAndThrow);
        uat.setText(MyThread.getStatus());
        return;
    }
};

我所知道的:

  1. 这可能是匿名类的一个例子。
  2. 实例实际上不是接口(interface)的。

但我无法将这些点联系起来。假设上面的代码在myActivity类内部,实例化的是什么,这个匿名类又是怎样的?

再详细点就好了。

最佳答案

它被称为“匿名类”。关于它的一些注意事项:

  1. 您没有为其提供名称,因此为您创建了一个名称。要查看其真实名称,只需将其写入控制台或读取字节码即可。

  2. 如果匿名类是在外部类的范围内创建的,那么就像任何内部类一样,它具有对其字段的引用。通常,它与创建时的范围相同。

  3. 如果您只需要一个简单的实现,这是一件很常见的事情。代码越多,您就越应该考虑将其放在另一个文件中(为了顺序,而不是因为您不能)。

  4. Runnable 并不是唯一通用的接口(interface)。在 Android 上,您使用 OnClickListener、OnTouchListener...

  5. 由于匿名类与其声明位置具有相同的作用域,这意味着它具有引用。尽量不要将匿名类保留太久(例如,在静态引用中),因为这可能会导致内存泄漏。在 Android 上它非常重要,因为这个 sample显示(谈论可绘制对象,但匿名类也可以引用上下文)。

  6. 匿名类的一些缺点是它们没有构造函数,而且它不能实现多个接口(interface)。它的用途非常狭窄,但由于易于使用(和阅读)而广受欢迎。

关于java - 安卓和Java : use of runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052158/

相关文章:

java - 无法找到或加载主类 org.testng.TestNG

c++ - 在实时应用程序中同步多个线程之间的容器访问的最佳方法是什么

iphone - 在iPad编程中使用多线程时出现问题(用于加载大量图像)

java - 修改快速修复 'Change visibility to default'

Java 11 从另一个类(Main)调用类属性(Car)时出现语法错误

java - 如果通过 java 代码访问 URL,Spring 身份验证会失败

Android Kotlin Coroutine 在 Logcat 中没有报告 fatal error 的情况下崩溃

android - kotlin kdoc 中的引用资源不可点击

android - 当应用程序停止使用 Sencha Touch 2.2 和 Phonegap 时,LocalStorage 存储不会持续存在于 Android 手机上

multithreading - 如何在 Perl 中实现信号量线程通信?