用onCreate()替换android构造函数

时间:2014-11-01 23:21:40

标签: android constructor oncreate vibration

我读过,你不应该使用构造函数。如何用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();
}

2 个答案:

答案 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回调中的传感器更改。