Методы устаревших потоков не поддерживаются
Я делаю один проект, в котором мне нужно отобразить домашнюю страницу и, когда отображается домашняя страница, после этого или продолжить в течение 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