title: Android sensors and thread
body: <p>I want to create an application where my sensors get values in another thread while the main thread is still working. I tried with just another thread, but it didn't working. I tried with a service and a IntentService, but the sensors start after the main thread. My current code is this. </p>
  
  <p>MyService.java</p>
  
  <pre><code>public class MyService extends IntentService implements SensorEventListener 
  {
      public MyService()
      {
          super("MyService");
      }
  
      Sensor mLight;
      SensorManager mSensorManager;
      float max;
      float currentLux;
      float currentProx;
  
      @Override
      public IBinder onBind(Intent intent) 
      {
          Log.d("Service", "On bind");
          return null;
      }
  
      @Override
      public void onCreate() 
      {
          Log.d("Service", "On create");
      }
  
      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) 
      {
          // TODO Auto-generated method stub
  
      }
  
      @Override
      public void onSensorChanged(SensorEvent event) 
      {
          if( event.sensor.getType() == Sensor.TYPE_LIGHT)
          {
              currentLux=(int) event.values[0];
              float perc=(float) ((currentLux*100)/max);
              Log.d("Light", String.valueOf(perc));
          }   
          else if(event.sensor.getType() == Sensor.TYPE_PROXIMITY)
          {
              currentProx=(int) event.values[0];
              Log.d("Proximity", String.valueOf(currentProx));
          }
      }
  
      @Override
      public void onDestroy() 
      {
          Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
          Log.d("Service", "On stop");
          mSensorManager.unregisterListener(this);
      }
  
      @Override
      public void onStart(Intent intent, int startid) 
      {
          Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
          Log.d("Service", "On start");
      }
  
      @Override//here u should register sensor and write onStartCommand not onStart
      public int onStartCommand(Intent intent, int flags, int startId) 
      {
          mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
          mSensorManager.registerListener(this, mSensorManager
                  .getDefaultSensor(Sensor.TYPE_LIGHT),
                  SensorManager.SENSOR_DELAY_FASTEST);
          mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
          mSensorManager.registerListener(this, mSensorManager
                  .getDefaultSensor(Sensor.TYPE_PROXIMITY),
                  SensorManager.SENSOR_DELAY_FASTEST);
          max=mLight.getMaximumRange();
          Log.d("MAX=", String.valueOf(max));
          return Service.START_STICKY;
      }
  
      @Override
      protected void onHandleIntent(Intent intent) 
      {
      }
  
  }
  </code></pre>
  
  <p>Listeners.java</p>
  
  <pre><code>public class Listeners extends Activity implements OnClickListener 
  {
       Button button0;
       Intent listenersIntent;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) 
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.listeners);
          lista= new ArrayList&lt;Float&gt;();
          button0 = (Button) findViewById(R.id.button0);
          button0.setOnClickListener(this);
          listenersIntent = new Intent(this, MyService.class);
          startService(listenersIntent);
          for (int i=0; i&lt;999; i++)
              Log.d("Main", String.valueOf(i));
      }
  
      @Override
      public void onClick(View arg0) 
      {
          stopService(listenersIntent);
      }
  }
  </code></pre>
  
  <p>My problem is that i get always 1-999 before any proximity/light values, while i want them to  run together. Can you help me please?</p>