2012-01-05 18 views
5

Ho una domanda che ho una schermata iniziale nella mia app per Android in cui sto usando thread per attendere 8 secondi, sta funzionando bene in 1.6,2.1,2.2,2.3 .3, 3.0, 3.1 ma restituisce errore quando voglio eseguire lo stesso nella versione 4.0.3 di Android, non so perché? Per favore suggeriscimi la soluzione giusta per lo stesso. Di seguito ho menzionato anche lo stack degli errori e il mio codice.Errore restituzioni thread in versione Android 4.0.3

Errore Stack:

01-05 10:16:06.417: E/AndroidRuntime(589): FATAL EXCEPTION: Thread-75 
01-05 10:16:06.417: E/AndroidRuntime(589): java.lang.UnsupportedOperationException 
01-05 10:16:06.417: E/AndroidRuntime(589): at java.lang.Thread.stop(Thread.java:1076) 
01-05 10:16:06.417: E/AndroidRuntime(589): at java.lang.Thread.stop(Thread.java:1063) 
01-05 10:16:06.417: E/AndroidRuntime(589): at com.shipface.common.SplashScreen$1.run(SplashScreen.java:34) 

Codice: metodo

public class SplashScreen extends Activity { 
    /** Called when the activity is first created. */ 
    Thread splash; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     splash = new Thread(){ 
      @Override 
      public void run(){ 
       try { 

        synchronized(this){ 
        // Wait given period of time or exit on touch 
         wait(4000); 
         Intent intent = new Intent(SplashScreen.this,HomeActivity.class); 
         startActivity(intent); 
         finish(); 
        } 
       } 
       catch(InterruptedException ex){      
       } 

       finish(); 


       stop();      
      } 
     }; 


     splash.start(); 
    } 
} 

risposta

3

Ognuno sta già detto dove l'eccezione è venuta da (Thread.stop()), quindi lascio che da sola ...

Di gran lunga, il metodo più semplice è quello di non creare un Thread per questo scopo a tutti; anche un AsyncTask sta facendo troppo. Questo è ciò che è stato creato per Handler (o anche CountDownTimer, ma Handler è più pulito, IMO).

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Handler handler = new Handler(); 
    Runnable action = new Runnable(){ 
     @Override 
     public void run(){ 
      Intent intent = new Intent(SplashScreen.this,HomeActivity.class); 
      startActivity(intent); 
      finish(); 
     } 
    }; 

    handler.postDelayed(action, 8000); 
} 

Il Handler sarà nemmeno eseguire l'azione sul thread principale per voi, in cui tale codice deve praticamente essere chiamato in ogni caso.

HTH

1

Thread.stop è deprecato che è la ragione che si stanno ottenendo eccezione. Funzionerà su versioni inferiori con un avvertimento. Prova a utilizzare AsyncTask anziché i thread. Essi sono molto più sicuro

1

Non so il motivo per cui è necessario stop() Thread, stop() è già deprecato che si vuole fermare il filo è possibile utilizzare thread_instance.interrupt(). Ma, semplicemente questo farà,

new Thread(new Runnable() { 

      @Override 
      public void run() { 

       try { 
        Thread.sleep(4000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Intent intent = new Intent(SplashScreen.this,HomeActivity.class); 
       startActivity(intent); 
       SplashScreen.this.finish(); 
      } 
     }).start(); 
1

Il metodo stop() è deprecato.
Nelle versioni precedenti, UnsupportedOperationException veniva semplicemente ignorato, tuttavia è possibile vederlo nel registro. Ma in 4.0.3, è considerato come un'eccezione irreversibile.
È possibile rimuovere la chiamata a stop() nel codice. Non è necessario

Problemi correlati