繁体   English   中英

调用非静态方法int静态类

[英]Call non-static method int static class

我有一个内部静态类,该类在我的主Activity中扩展了线程。 在此线程中,我需要从主Activity中调用非静态方法。

如我所见,我有2个选择:

  • 将我的非静态方法设为静态:此选项不可行,因为在此方法内,我将调用startActivityForResult,而无法以静态方式进行调用。
  • 在内部静态类中创建我的主Activity的对象,然后通过该对象调用方法。

      MainActivity mActivity = new MainActivity(); //... mActivity.method(); 

我现在使用的是第二个,但是对此我有疑问。 如果这样做,我了解我正在创建MainActivity的新实例,并且这样做是在onCreate方法中的所有定义都被调用了吗? 或者我只是调用该方法,而我在内部使用的变量将为null?

更新-

这是我需要从main调用方法的内部类。 我需要将此保持静态,因为应用程序的基本功能需要采用这种方式。 现在,我在主要活动中引入了一个新方法,当线程内发生操作时必须调用该新方法:

private static final class DetectionThread extends Thread {
    //...

    public DetectionThread(byte[] data, int width, int height) {

    }

    @Override
        public void run() {

        //DO STUFF HERE

        //Action happens and calls the method from main activity:
        SpeechWhenMotion();
        //...
        }
    }
}

这是在主要活动中定义的方法的标题。 在其中,我正在调用另一个为结果启动活动的方法,因此这就是为什么我无法将此方法设置为静态的原因:

public void SpeechWhenMotion() {
    //...
}

假设MainActivity是外部类,我想您正在寻找的是

MainActivity.this.startActivityForResult()

创建另一个对象不是正确的解决方案。

顺便说一句,创建一个扩展Thread的类同样不好。 我看不出您需要这样做的原因。 对于所有需要做的事情,除非使用复杂的线程,所有要做的就是实现Runnable()。 这样做可以正确地将线程问题与业务逻辑分开。

将MainActivity实例传递给您的静态方法。 然后从该实例调用.method()。

static void doSomething(MainActivity ma) {
  ma.method();
}

这或您发布的第二个选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM