2011-12-31 2 views
2

홈 페이지를 표시해야하는 프로젝트를 한 개 만들었습니다. 홈 페이지가 표시되거나 그 후 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; 
} 

로그 캣에서 오류 :

안드로이드에서
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) 

답변

11

의 더 나은이 핸들러 인스턴스를 작성 ThreadRunnables

관리를위한 Handler를 사용하는

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); 
     } 
    }; 

을 만들고

handler.postDelayed(runnable, 1000); 

처리기

를 사용하여 실행 가능한을 시작하고이 링크는 문제가 정확히 무엇을 알려줍니다

handler.removeCallbacks(runnable); 
+0

고맙습니다 .. 감사합니다 .. 선생님. – Dharmik

+0

외부에서 처리기를 사용합니다 .. run() 메서드를 넣을 때 runnable이 초기화되지 않습니다. 오류 – Dharmik

+0

상단의 처리기를 전역으로 선언하고 사용해야합니다. –

1

실행 가능한 사용을 중지하는 방법 해결하려면 :

What is this log, when I coded thread.stop()?

Thread.stop은 더 이상 사용되지 않는 API이며 더 이상 사용되지 않는 스레드 메소드는 Android에서 이 지원되지 않습니다. 따라서 UnsupportedOperationException이 발생합니다.

대답은 Thread.stop을 사용하지 않는 것입니다. 예를 들어 스레드가 주기적으로 검사하는 플래그를 설정하여보다 부드러운 방법으로 의 스레드를 종료하십시오.

이 링크는 Thread.stop를()가 사용되지 않는 이유 (오래 전에 자바에서 더 이상 사용되지뿐 아니라 안드로이드!) 설명 :

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

1

가 시작을 할 수있는이 최선의 방법을 넣어 화면

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); 
+0

이 방법을 사용하면 일부 안드로이드 장치에서 http://stackoverflow.com/a/20905954/361100 링크의 문제가 발생할 수 있습니다. – Youngjae

관련 문제