我有一个内部静态类,它在我的主Activity中扩展了线程。在这个Thread中,我需要从我的主Activity调用一个非静态方法。
如我所见,我有两个选择:
在内部静态类中创建主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() {
//...
}
答案 0 :(得分:1)
假设MainActivity是外部类,我想你要找的是
MainActivity.this.startActivityForResult()
创建另一个对象并不是正确的解决方案。
顺便说一句,创建一个扩展Thread的类同样糟糕。我没有看到你需要这样做的原因。除非复杂的线程,否则您需要做的就是实现Runnable()。这样做可以正确地将您的线程问题与业务逻辑隔离开来。
答案 1 :(得分:0)
将MainActivity实例传递给静态方法。然后从该实例调用.method()。
static void doSomething(MainActivity ma) {
ma.method();
}
这是您发布的第二个选项。