Handler(). PostDelayed() отправка нескольких намерений при изменении ориентации
Хорошо, я работаю над заставкой, которая делает паузу на 1,5 секунды и прекрасно работает, за исключением одной вещи. Однажды timer
начинается в onCreate
если конфигурация (ориентация) меняется, то timer
получает сброс, а затем конечный результат, он начинает мой ParchmentActivity.java
дважды.
Как я могу предотвратить отправку намерения обработчиком дважды?
Заранее спасибо!
Полный код можно найти @: https://github.com/n00bware/android_apps_parchment
Вот мой код (из примера http://www.anddev.org/novice-tutorials-f8/splash-fade-activity-animations-overridependingtransition-t9464.html):
public class SplashScreen extends Activity {
private static final int SPLASH_DISPLAY_TIME = 1500; /* 1.5 seconds */
private static final String TAG = "Parchment";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Create a new handler with which to start the main activity
and close this splash activity after SPLASH_DISPLAY_TIME has
elapsed. */
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent parchment = new Intent(SplashScreen.this, ParchmentActivity.class);
SplashScreen.this.startActivity(parchment);
SplashScreen.this.finish();
overridePendingTransition(R.anim.fade_main_in, R.anim.fade_splash_out);
}
}, SPLASH_DISPLAY_TIME);
}
/* I found a suggestion to try overriding onConfigurationChanged()
but it doesn't stop a new timer from being started */
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
/* I also tried overriding onStart() but this also doesn't stop a
new timer. What exactly is called when an orientation configuration
changes happens? */
@Override
public void onStart() {
super.onStart();
setContentView(R.layout.splash);
}
2 ответа
Вы можете создать новый статический логический тип, установить его в false и при создании создать действие Handler, только если флаг имеет значение false...
PS: внутри оператора if вы должны установить логический флаг в true:)
Удачи!
Создайте обработчик в onCreate, отпустите его в onDestroy, отправьте сообщение / опубликуйте исполняемый файл в onStart, удалите сообщение / runnable в onStop.
Это будет сбрасывать таймер при каждом повороте, так что вы можете держать заставку вверх, если поворачиваете устройство каждую секунду.
В Android переключение вращений может занять около секунды, вам, вероятно, нужно такое поведение, потому что можно было бы запустить приложение, повернуть и не видеть всплеск.