话说以前做的一个纯Java引擎准备移植到Android上面,前期已做过Demo,看起来一切都没有什么问题。不过,现在真正移植问题就来了。
第一个问题就是,以前的Demo只是一个画面,引擎初期化是放在Activity的onCreate方法里面,这样做当然没有什么问题啦。现在画面增加到10来个,这个引擎如何为各个Activity公用成为了一个问题。
对Android不熟悉,也只算是边学边做,所以有了下面的想法:
1、用Service
2、用Thread
3、用Application
现在用了第3种方法成功了。
第1、2中方法我想本质上都是启动一个独立于Activity的线程,但是无法和Activity挂上关系。所以肯定是NullPointException啦。
具体做法:
很简单,引擎(或者某个普通的类)需要初始化,而且在应用程序不被销毁之前报保证被各个Activity可用。
1、自定义一个类MyApplication来继承Application,在这个类中的onCreate方法里面初始化引擎。
2、为了在各个Activity类中可以调用引擎,需要在1的自定义类中写一个getEngine的方法。
class MyApplication extends Application {
private Engine engine;
public Engine getEngine(){
return engine;
}
public void onCreate(){
engine = new Engine();
engine.init();
}
}
3、在Activity中通过获取引擎对象,并调用getEngine
MyApplication app = ((MyApplication)this.getApplicationContext());
Engine engine = app.getEngine();
4、在AndroidMainfest.xml文件中将Application节点的Android:name改成我们自定义的类。
以上