Android - WallpaperService为什么我的引擎必须是一个内部类?

时间:2010-08-16 14:55:21

标签: android inner-classes wallpaper

我正在制作一个简单的Android动态壁纸,我正在关注 Hello,Android 的第12章作为我的向导。

壁纸服务的基础是这样的:

public class MyWallpaper extends WallpaperService {

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

    //...

}

根据该书MyEngine 必须MyWallpaper的内部类。我没有理由对此提出异议,但这本书没有解释为何必须如此。我不喜欢纯粹出于风格/美学原因而使用内部类。

我想知道MyEngine实际上是否必须是私人内部类,如果是,为什么?

2 个答案:

答案 0 :(得分:4)

你应该这样做,因为class Engine嵌套在abstract class WallpaperService中。如果你试图让它不嵌套,你的IDE /编译器会告诉你这样的事情:

  

没有封闭的类型实例   WallpaperService可以访问   调用超级构造函数。必须   明确定义构造函数   限定其超级构造函数   使用实例调用   WallpaperService(例如x.super()在哪里   x是WallpaperService的一个实例。

松散翻译的意思是“你可以这样做,但它最终会比你只使用嵌套类更糟糕。”

答案 1 :(得分:0)

您可以将您的引擎放在一个单独的类中。我只是用我自己的壁纸试了一下它编译好了。

在WallpaperService子类中的onCreateEngine()重写中,只需将“this”传递给Engine构造函数即可。构造函数应该将其作为WallpaperService接收。在构造函数的第一行中,调用wallpaperSvcObject.super()。

编辑:在考虑Justin Buser说的话后,我不确定我的建议是否合适。您的引擎将无法访问WallpaperService的成员,因为它们都必须通过wallpaperSvcObject。我不知道他是指那是什么。