Методы устаревших потоков не поддерживаются

Я делаю один проект, в котором мне нужно отобразить домашнюю страницу и, когда отображается домашняя страница, после этого или продолжить в течение 3–5 секунд, отображается другое мое приветственное диалоговое окно. но при этом возникает следующая ошибка, но мое приложение не перестает работать.. LogCat отображает эти ошибки. Код приложения:

  final Dialog d=new Dialog(Main.this);
    d.setContentView(R.layout.SplashScreen);
    Thread splashTread = new Thread() {
        @Override
        public void run() {
            try {
                d.show();

                int waited = 0;
                while(_active && (waited < _splashTime)) {
                    sleep(100);
                    if(_active) {
                        waited += 100;
                    }
                }
            } catch(InterruptedException e) {
                // do nothing
            } finally {
                d.cancel();
                    stop();
            }
        }
    };
    splashTread.start();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        _active = false;
    }
    return true;
}

Ошибка в LogCat:

12-30 14:54:54.044: E/global(1232): Deprecated Thread methods are not supported.
12-30 14:54:54.044: E/global(1232): java.lang.UnsupportedOperationException.
12-30 14:54:54.044: E/global(1232):     at java.lang.VMThread.stop(VMThread.java:85)
12-30 14:54:54.044: E/global(1232):     at java.lang.Thread.stop(Thread.java:1280)
12-30 14:54:54.044: E/global(1232):     at java.lang.Thread.stop(Thread.java:1247)
12-30 14:54:54.044: E/global(1232):     at com.droidnova.android.SplashScreen$1.run(SplashScreen.java:35)

3 ответа

Решение

В Android лучше использовать Handler для управления Thread а также Runnables

Создать экземпляр обработчика

Handler handler = new Handler();

Создать Runnable поток

Runnable runnable = new Runnable() {

        @Override
        public void run() {
            Log.d("runnable started", "inside run");
            handler.removeCallbacks(runnable);
            handler.postDelayed(runnable, 1000);
        }
    };

И запустить Runnable с помощью обработчика

handler.postDelayed(runnable, 1000);

И остановить использование Runnable

handler.removeCallbacks(runnable);

Поместите этот лучший способ сделать заставку

int SPLASH_TIME = 1300;
    Handler HANDLER = new Handler();

                    // thread for displaying the SplashScreen
                    HANDLER.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                         finish();
                         startActivity (new Intent(getApplicationContext(),Alpha.class));
                        }
                      }, SPLASH_TIME);

По этой ссылке вы узнаете, в чем конкретно проблема и как ее решить:

Что это за журнал, когда я закодировал thread.stop()?

Thread.stop является устаревшим API, а устаревшие методы потоков не поддерживаются в Android. Поэтому он генерирует исключение UnsupportedOperationException.

Ответ не в том, чтобы использовать Thread.stop - закрывайте свои потоки более изящным способом, например, устанавливая флаг, который поток периодически проверяет.

Эта ссылка обсуждает, почему thread.stop() устарел (давно устарел в Java, а не только в Android!):

http://docs.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

Другие вопросы по тегам