2011-11-22 24 views
6

Próbuję odczytać wiele czujników z karty Samsung Galaxy Tab GT-P1000 i wydaje się, że procesor jest dość poważny w stosunku do aplikacji, z których korzystałem.Używanie procesora z Androidem

Jako test, stworzyłem krótki program, który implementuje SensorEventListener dla czujnika akcelerometru, ale nic nie robi z odczytów czujnika:

public class SensorTestActivity extends Activity implements SensorEventListener { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     SensorManager oSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     oSensorManager.registerListener(this, oSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME); 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 

    } 
} 

Wynika to w 10% zużycia procesora podczas stała mi debugowania (moje urządzenie jest podłączone do mojego komputera) i 5% użycia, podczas gdy ja nie. Jeśli użyję SENSOR_DELAY_FASTEST, użycie będzie wzrastać do stałej wartości 30% podczas debugowania i 20%, podczas gdy ja nie.

Stwarza to ogromny problem, gdy chcę korzystać z wielu czujników, ponieważ wszystkie mają wysokie użycie procesora i to bez przetwarzania danych. Używałem aplikacji Compass z Android Market i żadne z nich nie zużywa więcej niż 5% procesora w danym momencie, więc czuję, że brakuje mi czegoś oczywistego, ale nie mogę znaleźć nikogo, kto miałby ten sam problem .

Nie edytowałem pliku manifestu ani układu dla tej aplikacji - jest to domyślny szablon stworzony przez Eclipse i dodałem czujnik.

AKTUALIZACJA: Moja metoda odczytu użycia procesora jest błędna, ponieważ używałem menedżera zadań do jej pomiaru. Moja aplikacja nie zatrzymuje czujników za pomocą funkcji onPause, gdy menedżer zadań otwiera się, podczas gdy większość innych aplikacji to robi.

Odpowiedz

4

Powoduje to 10% stałe użycie procesora podczas debugowania (tj. Moje urządzenie jest podłączone do mojego komputera) i 5% użycia, podczas gdy ja nim nie jestem. Jeśli użyję SENSOR_DELAY_FASTEST, użycie będzie wzrastać do stałej wartości 30% podczas debugowania i 20%, podczas gdy ja nie.

Następnie użyj SENSOR_DELAY_UI lub SENSOR_DELAY_NORMAL, których zmiana Cię z danymi czujnika zarówno rzadziej i powinien zużywać odpowiednio mniej czasu procesora.

użyłem aplikacji Compass z Android Market i żaden z nich nie używać więcej niż 5% CPU w danym momencie

Prawdopodobnie nie używać SENSOR_DELAY_GAME lub SENSOR_DELAY_FASTEST.

Poza tym różne urządzenia (być może z różnymi chipsetami czujników) mogą powodować różne wykorzystanie procesora. Na przykład niektóre urządzenia irytująco rozmawiają w LogCat - urządzenia, które logują się na podstawie odczytów czujników, będą proporcjonalnie wolniejsze.

Ponadto, nie wiem, jak mierzysz wykorzystanie procesora, ale nie jestem świadomy jakichkolwiek oficjalnie wspieranych środków do tego. Zamiast tego skupiłbym się na takich rzeczach jak liczba klatek na sekundę w grze lub cokolwiek to jest, co piszesz.

+0

Byłem dość głupi z moim oświadczeniem o wykorzystaniu procesora - zmierzyłem użycie w Menedżerze zadań, zapominając, że większość aplikacji będzie WSTRZYMAĆ czujniki, kiedy to zrobię, a tym samym dać naprawdę mały odczyt. Moja aplikacja z drugiej strony nie zatrzymała czujników w nadpisanej metodzie Pause. Być może najlepszym sposobem rozwiązania tego problemu jest próba ustawienia własnych niestandardowych opóźnień lub jednego z podanych, ponieważ dodanie większej liczby czujników, takich jak magnometr lub żyroskop, może naprawdę spowodować brzydkie rzeczy. – Namdrater

+0

@ user1021922: Nie możesz tworzyć niestandardowych opóźnień, przepraszam. – CommonsWare