2010-08-16 2 views
4

나는 간단한 안드로이드 라이브 벽지에서 일하고있다, 나는 1238을 따르고있다. 안녕하세요, 안드로이드는 나의 가이드입니다. MyEngineMyWallpaper의 내부 클래스 여야 책에 따르면Android - WallpaperService 왜 내 엔진이 내부 클래스 여야합니까?

public class MyWallpaper extends WallpaperService { 

    private class MyEngine extends Engine { 
    //... 
    }   

    //... 

} 

: 배경 화면 서비스의

베어 - 뼈는 다음과 같습니다. 나는이 문제에 대해 논할 이유가 없지만이 책은 왜 그렇게되어야하는지에 관해서는 아무런 설명도하지 않고있다. 나는 문체/미적 이유로 순전히 내부 클래스를 사용하지 않는 것을 선호한다.

MyEngine이 실제로 개인 내부 클래스인지 여부, 궁금한 점은 무엇입니까?

답변

4

class Engineabstract class WallpaperService에 중첩되어 있기 때문에 이런 식으로해야합니다. 슈퍼 생성자를 호출 유형 의

없음 둘러싸는 예를 WallpaperService에 액세스 할 에 : 당신이 중첩되지 만들려고 경우, IDE/컴파일러는 당신에게 같은 것을 말할 것이다. 은 생성자를 정의해야하며 WallpaperService (예 : x.super()가 x가 WallpaperService의 인스턴스 임)로 슈퍼 생성자를 명시 적으로 한정해야합니다.

느슨하게 번역 된 것은 "사용자가 그렇게 할 수는 있지만 중첩 된 클래스를 사용하는 것보다 못 생기게됩니다"라는 의미입니다.

+0

사실 실제로 WallpaperService 인스턴스를 참조하는 데 WallpaperService.this를 사용할 수 없다면 본질적으로 그렇게 할 수 없다고 말합니다. 그런 다음 라이브 배경 화면 프레임 워크의 제한 내에서 작동하지 않습니다. –

0

당신은 별도의 클래스에서 엔진을 가질 수 있습니다. 난 그냥 내 자신의 벽지와 함께 노력하고 컴파일하고 잘 실행됩니다.

WallpaperService 하위 클래스의 onCreateEngine() 재정의에서는 'this'를 Engine 생성자에 전달하기 만하면됩니다. 생성자는이를 WallpaperService로 받아야합니다. 생성자의 첫 번째 줄에서 wallpaperSvcObject.super()를 호출합니다.

편집 : Justin Buser가 말한 것을 생각한 후에, 내 조언이 좋은지 확실하지 않습니다. 모두 wallpaperSvcObject를 통과해야하기 때문에 엔진에서 WallpaperService의 멤버에 액세스 할 수 없게됩니다. 그것이 그가 언급 한 것이 었는지 나는 모른다.