2014-04-30 2 views
0

내 주 활동 내 스레드를 확장하는 내부 정적 클래스가 있습니다. 이 스레드에서는 필자의 주요 활동에서 비 정적 메서드를 호출해야합니다.비 정적 메서드 int 정적 클래스를 호출

  • 내 비 정적 메서드가 정적 확인 : I시피

    , 나는 두 가지 옵션이 있습니다이 옵션은 내가에 startActivityForResult 호출이 방법 내부 가능한 원인이되지 않을 것 나는 정적이를 호출 할 수 없습니다 방법.

  • 내 정적 클래스 내부에 내 주요 활동 객체를 만들고이 객체를 통해 메소드를 호출하십시오.

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

내가 지금 사용하고 한

두 번째,하지만 난 그것에 대해 의심의 여지가있다. 이 작업을 수행하면 MainActivity의 새 인스턴스를 만들고 이것을 이해하며 onCreate 메서드의 모든 정의가 호출됩니까? 아니면 방금 메서드를 호출하고 내부에서 사용하는 변수가 null이 될까요?

UPDATE -

이 내가 주에서 메소드를 호출 할 필요가 내부 클래스입니다. 애플 리케이션의 기본 기능이 이런식이 필요하기 때문에 정적이 필요합니다. 지금은 작업 스레드 내부에서 발생했을 때 호출 할 필요가 주요 활동의 새로운 방법을 도입하고 있습니다 :

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

'inner static class' 내부 클래스가 외부 클래스의 비 정적 메소드를 사용한다고 가정하면, 처음에는 정적이 아니어야합니다. 디자인 결정에 대한 설명을 추가 할 수 있습니까? – Pshemo

답변

0

는 정적 메소드에 MainActivity 인스턴스를 전달합니다. 그런 다음 해당 인스턴스에서 .method()를 호출하십시오.

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

게시 한 두 번째 옵션입니다. MainActivity 가정

+0

두 번째 옵션이 잘못되었습니다. 'new'로 활동을 인스턴스화하지 마십시오. – laalto

1

는 외부 클래스, 난 당신이 올바른 해결책이 아니라 또 다른 객체를 만들기 위해

MainActivity.this.startActivityForResult() 

입니다 무엇을 찾고있는 것 같아요.

그리고 BTW, Thread를 확장하는 클래스를 만드는 것도 마찬가지입니다. 네가해야 할 이유가 보이지 않아. 정교한 스레딩이 필요하지 않으면 Runnable()을 구현하는 것뿐입니다. 비즈니스 로직과 스레딩 관심사를 적절히 분리하십시오.

+0

조금 더 설명 할 수있는 몇 가지 코드가 추가되었습니다. – masmic

관련 문제