调用非静态方法int static class

时间:2014-04-30 10:18:33

标签: java android static

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

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

  • 将我的非静态方法设为静态:此选项不可行,因为在此方法中我调用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() {
    //...
}

2 个答案:

答案 0 :(得分:1)

假设MainActivity是外部类,我想你要找的是

MainActivity.this.startActivityForResult()

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

顺便说一句,创建一个扩展Thread的类同样糟糕。我没有看到你需要这样做的原因。除非复杂的线程,否则您需要做的就是实现Runnable()。这样做可以正确地将您的线程问题与业务逻辑隔离开来。

答案 1 :(得分:0)

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

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

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