예 포 그라운드 응용 프로그램과 독립적으로 사용하기 위해 근접 센서 입력과 함께 백그라운드에서 실행되는 서비스를 구현해야합니다. 코드를 다음 인해 꽉 메모리 부족에 배경
public class PocketService extends Service implements SensorEventListener {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onCreate");
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
mSensorManager.registerListener(this, mProximity,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onDestroy");
mSensorManager.unregisterListener(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onStart");
return START_STICKY;
}
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
if (sensor.getType() == Sensor.TYPE_PROXIMITY) {
distance = event.values[0];
if (distance < 1) {
enableScreenLock();
} else {
disableScreenLock();
}
}
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
}
당신은 활동에서이 작업을 시작해야하고 작업 관리자를 죽이기까지 그것은 당신의 백그라운드에서 실행에서 실행되는 서비스를 보여줍니다. 그러나 onStartCommand() 메서드가 START_STICKY를 반환하기 때문에 메모리를 사용할 수있는 동안 인스턴스를 다시 만들려고합니다.
서비스에이 수신기를 등록하려고 시도 했습니까? – Huang