Handler (). PostDelayed () отправка нескольких намерений при изменении ориентации - PullRequest
0 голосов
/ 01 декабря 2011

Хорошо, я работаю над заставкой, которая делает паузу на 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 ]

1 голос
/ 01 декабря 2011

Создайте обработчик в onCreate, отпустите его в onDestroy, отправьте сообщение / опубликуйте runnable в onStart, удалите сообщение / runnable в onStop.

Это сбросит таймер при каждом повороте, так что вы можете потенциальнодержите заставку, если вы поворачиваете устройство каждую секунду.

В Android может потребоваться секунда или около того, чтобы переключать вращения, вам, вероятно, нужно такое поведение, потому что было бы возможно запустить приложение, повернуть и не видетьвсплеск.

1 голос
/ 01 декабря 2011

вы можете создать новый статический логический тип, установить его в значение false и при создании выполнить действие Handler только в том случае, если флаг имеет значение false ...

PS: внутри оператора if необходимо установить логический флагк истине:)

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...