2010-08-16 74 views
4

我正在研究一个简单的Android动态壁纸,我从开始阅读第12章,你好,Android作为我的指导。Android - WallpaperService为什么我的引擎必须是内部类?

壁纸服务的裸机是这样的:

public class MyWallpaper extends WallpaperService { 

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

    //... 

} 

据该书MyEngine必须是一个内部类的MyWallpaper。我没有理由对此提出异议,但该书没有解释为什么这一定是如此。我更喜欢不纯粹为了文体/美学原因而使用内部类。 ,

我在想,如果MyEngine实际上已经是一个私有内部类,如果是这样,为什么?

回答

4

你应该做这种方式,因为class Engine嵌套在abstract class WallpaperService内。如果你尽量做到不嵌套,你的IDE /编译器会告诉你是这样的:以

类型没有外围实例WallpaperService是可访问的调用超级构造函数。必须 定义构造函数,并明确地规定其超级构造函数 调用 WallpaperService(例如x.super(),其中 x是WallpaperService的一个实例)。

其中,松散地翻译,意思是“你可以这样做,但它会比如果你只是使用嵌套类丑陋的结局。”

+0

实际上它说你不能这样做,本质上如果你不能使用WallpaperService.this来引用父WallpaperService实例,那么它不会在动态壁纸框架的限制内起作用。 – 2012-12-06 01:16:49

0

你可以让你的引擎在一个单独的类。我只是用我自己的壁纸试过,它编译并运行良好。

在WallpaperService子类中的onCreateEngine()覆盖中,只需将'this'传递给您的Engine构造函数。构造函数应该将其作为WallpaperService接收。在构造函数的第一行中,调用wallpaperSvcObject.super()。

编辑:思考什么贾斯汀布塞说后,我不知道如果我的建议是很好的。您的引擎将无法访问WallpaperService的成员,因为它必须通过wallpaperSvcObject。我不知道这是他所指的。

相关问题