2012-10-26 16 views
5

ile bittiğini öğrenin Bir Android aygıtının ekranını döndürmenin ne kadar sürdüğünü ölçmek için bir .apk yazmaya çalışıyorum (çift döngüde döngü).Rotasyonun ne zaman setRequestedOrientation

ben 4 pozisyonlarında (PORTRAIT, LANDSCAPE, REVERSE_PORTRAIT ve REVERSE_LANDSCAPE) ekranı reoriente için setRequestedOrientation() çağrıları kullanıyorum.

Sorunum, rotasyonun ne zaman biteceğini anlayamıyorum. Birkaç çözüm denedim, ancak her birinin sorunları var.

  1. 'u kullanmayı denedim. Sorun, oryantasyon değişikliği sensörden gerçekleştiğinde ve setRequestedOrientation()'dan değil, bu yöntemin tetiklenmesidir. Ben setRequestedOrientation() için setRequestedOrientation()setRequestedOrientation()setRequestedOrientation() benim önceki çağrı sonrası çalışmaya onConfigurationChanged parametresi ile setRequestedOrientation() aramak zorunda.
  2. Ekran yönünü (derece cinsinden) kontrol etmek için bir while döngüsü ekleyerek setRequestedOrientation() "engelleme" türünü yapmayı denedim. setRequestedOrientation()'dan önce android.view.Display.getRotation()'u aradım ve değişene kadar bir while döngüsü ile blok. Ne yazık ki, bu da işe yaramıyor. UI yeniden görünmeden önce döner.
  3. Rotasyonun yapıldığını varsaymak için tekrar çağrılmak üzere onCreate() bekleyerek etkinliğin yaşam döngüsünü izlemeyi denedim. Önceden, sayacım setRequestedOrientation() numaralı çağıran her iterasyonda bir değere ulaşana kadar döngü yapıyordum. Bu senaryoda, while döngüsüm bir if ifadesi olur ve her seferinde onCreate işlevini çağıracağını varsayalım, ancak bir çift yineleme sonrasında onCreate() çağrılmıyor. Kullanıcı arayüzü de yeniden çizilmiyor gibi görünüyor.
  4. Çevrimiçi bulduğum (ancak tam olarak gerçekleştiremediğim) son çözüm, setRequestedOrientation()'dan hemen sonra waitForIdleSync() yöntemini kullanmaktır. waitForIdleSync(), Instrumentation sınıfının bir parçasıdır ve bence bu, test için yapılmış ve standart bir .apk için değil.

Herhangi bir fikir gerçekten memnuniyetle karşılanacaktır. Yardımını gerçekten takdir ederim.

cevap

0

Android API aracılığıyla setRequestedOrientation()'un ne zaman tamamlandığını öğrenmenin doğrudan bir yolu yoktur. Bilmenin tek yolu, onu aramadan önce ve onCreate() numaralı telefondan aradıktan sonra geçerli yönlendirmeyi kontrol etmektir. senin Activity sınıfında

yapın:

long timeStamp; 

public void onCreate(Bundle savedInstanceState) { 
    if (savedInstanceState == null) { 
      timeStamp = System.currentTimeMillis();  
    } 
    else { 
      timeStamp = savedInstanceState.getLong("state_time_stamp"); 
    } 

    // For example, check how long it takes to switch from portrait to landscape. 
    // You can modify this part to check PORTRAIT, LANDSCAPE, REVERSE_PORTRAIT and REVERSE_LANDSCAPE. 
    final int orientation = getResources().getConfiguration().orientation;  
    if (orientation == Configuration.SCREEN_ORIENTATION_PORTRAIT) { 
      setRequestedOrientation(ActivityInfo.ORIENTATION_LANDSCAPE); 
      return; 
    } 

    // We will reach here only after setRequestedOrientation() is done 
    // and here's the time it took to change the orientation: 
    final long elapsedTime = System.currentTimeMillis() - timeStamp; 
} 

public void onSaveInstanceState(Bundle outState) { 
    outState.putLong("state_time_stamp", timeStamp); 
}