Проблема с заставкой - PullRequest
0 голосов
/ 09 мая 2011

Я создаю заставку, используя следующий код, когда я нажимаю клавишу «Назад», приложение переходит на домашний экран и в течение нескольких секунд показывает мой следующий экран главного меню. Я вызываю метод finish () в onBackPressed (), я хочузакрыть приложение при нажатии клавиши возврата на заставке. Может ли кто-нибудь помочь мне в этом ??

Спасибо !!

     Thread splashThread = new Thread() {
        @Override
        public void run() {
           try {
              int waited = 0;
              while (_active && (waited < 2000)) {
                 sleep(100);
                 if(_active) {
                     waited += 100;
                 }
              }
           } catch (InterruptedException e) {
              // do nothing
           } finally {

               finish();
               startActivity(new Intent("next activity"));
               stop();
           }
        }
     };
     splashThread.start();

Ответы [ 4 ]

2 голосов
/ 09 мая 2011

Это потому, что вы звоните finish(); до startActivity(new Intent("next activity"));

Обмен finish(); с startActivity(new Intent("next activity"));

0 голосов
/ 16 мая 2011

это решение решает проблему только для кнопки возврата.Если пользователи нажимают кнопку «домой», нежелательное поведение все равно будет происходить.Разве не было бы проще переписать метод onStop и выполнить свою задачу?

@Override
public void onStop(){
    super.onStop();
    if(splashTread.isAlive())
       this.stop = true;
}
0 голосов
/ 09 мая 2011

Это работает в моем приложении

public class Splash extends Activity {
protected boolean _active = true;
protected int _splashTime = 3000;
Thread splashTread;
private boolean stop = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    splashTread = new Thread() {
        @Override
        public void run() {
            try {
                int waited = 0;
                while(_active && (waited < _splashTime)) {
                    sleep(100);
                    if(_active) {
                        waited += 100;
                    }
                }

            } catch(InterruptedException e) {
                // do nothing
            } finally {

                if(!stop){
                    startActivity(new Intent(Splash.this,Home.class));
                    finish();
                }
                else
                    finish();
            }
        }

    };
    splashTread.start();

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {

        if(splashTread.isAlive())
            this.stop = true;
    }
    return true;
}

}

0 голосов
/ 09 мая 2011

Попробуйте использовать это:

SplashScreen.this.finish ();

, где SplashScreen - имя действия

...