2014-04-30 64 views
0

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

依我之见,我有两个选择:

  • 让我非静态方法静态:此选项不会是这种方法里面可行,因为我打电话startActivityForResult,我不能在静态调用此办法。
  • 在内部静态类中创建主Activity的对象,并通过此对象调用方法。

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

我现在使用的一个是第二,但我有一个疑问。如果我这样做,我明白我正在创建一个MainActivity的新实例,并且执行此操作时,onCreate方法中的所有定义都称为?或者我只是调用方法,我在里面使用的变量将为空?

更新 -

这是内部类,我需要调用从主要的方法。我需要这是静态的,因为应用程序的基本功能需要它这样。现在我介绍的主要活动的新方法,当一个动作的线程中发生时必须调用:

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() { 
    //... 
} 
+4

发布代码将解释更多。 –

+2

您不会因为您将您的方法编码为静态而您不决定使用static关键字,反之亦然。看看你是否可以改变你的设计,并思考一下你的逻辑是否在不同实例之间变化,或者始终保持静态。 – prabugp

+0

内部静态类如果内部类应该使用外部类的非静态方法,那么它看起来应该不是静态的。你可以添加一些你的设计决定的解释吗? – Pshemo

回答

0

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

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

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

+0

第二种选择是错误的。永远不要用'new'实例化活动。 – laalto

1

假设MainActivity是外部类的,我想你在找什么是

MainActivity.this.startActivityForResult() 

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

而且顺便说一句,创建一个扩展Thread的类同样很糟糕。我没有看到你需要这样做的理由。除了复杂的线程之外,你需要做的只是实现Runnable()。这样做可以将您的线程关注与业务逻辑分开。

+0

添加了一些可以解释更多的代码 – masmic

相关问题