我读过,你不应该使用构造函数。如何用onCreate()替换构造函数?
我需要onCreate(),因为我喜欢用系统服务实现振动
在MainActivity中
gameEngine = new GameEngine((SensorManager)getSystemService(Context.SENSOR_SERVICE),gameView,this,this);
GameEngine中的构造函数
public GameEngine(SensorManager sensorManager, IGameView gameView, OnPlayerInHouseListener onPlayerInHouseListener, OnGameOverListener onGameOverListener) {
this.sensorManager = sensorManager;
this.gameView = gameView;
this.onPlayerInHouseListener = onPlayerInHouseListener;
this.onGameOverListener = onGameOverListener;
this.gameView.clearObstacles();
}
答案 0 :(得分:1)
我现在解决了这个问题。我将MainActivity.class中的振动器发送到GameEngine.class,就像我发送其他东西一样。
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
gameEngine = new GameEngine((SensorManager)getSystemService(Context.SENSOR_SERVICE),gameView,this,this,vibrator);
新构造函数
public GameEngine(SensorManager sensorManager, IGameView gameView, OnPlayerInHouseListener onPlayerInHouseListener, OnGameOverListener onGameOverListener, Vibrator vibrator) {
this.sensorManager = sensorManager;
this.gameView = gameView;
this.onPlayerInHouseListener = onPlayerInHouseListener;
this.onGameOverListener = onGameOverListener;
this.vibrator = vibrator;
this.gameView.clearObstacles();
}
然后我可以致电vibrator.vibrate(200);
这是最简单的。
答案 1 :(得分:0)
首先,因为您没有扩展任何onCreate()作为Android框架内的生命周期方法无法使用。
也许最好根据您的需要扩展Activity或更可能的Service并覆盖onCreate()并添加适当的代码构造,然后使用捆绑的游戏数据调用它并通过Intent传递。
另外,在主/ UI线程上进行任何计算工作都可能会导致很多Jank(丢帧),所以我会使用IntentService / AsyncTask / Runnable或任何繁重的工作。
处理传感器的基本功能,如:
Activity.class
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
Intent i = new Intent(this, GameEngineSensor.class);
/* parcel up your game data here */
startService(i);
GameEngine.class
public class GameEngineSensor extends Service implements SensorEventListener{
public GameEngineSensor() {
}
@Override
public void onCreate() {
super.onCreate();
/*unparcel game data here */
SensorManager gameEngine = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//registerListener as appropriate..
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
//....
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
//....
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
如果您有更多的核心逻辑,我将在服务中运行它,无论是IntentService还是Service with AsyncTask,Runnable或者其他任何东西。
您可以使用各种方法,绑定服务(Messenger / IBinder),广播(可能很慢)或通过UI Looper和处理程序回调UI以处理SensorEventListener回调中的传感器更改。