[英]Call non-static method int static class
我有一个内部静态类,该类在我的主Activity中扩展了线程。 在此线程中,我需要从主Activity中调用非静态方法。
如我所见,我有2个选择:
在内部静态类中创建我的主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.