2012-01-05 19 views
5

Android uygulamasında 8 saniye beklemek için iş parçacığı kullanıyorum, 1.6.2.1,2.2,2.3'de düzgün çalışıyor ve bir açılış ekranım var. .3, 3.0, 3.1 ama android 4.0.3 sürümünde çalıştırmak istediğimde hata döndürür, nedenini bilmiyorum? Lütfen bana doğru çözümü öner. Aşağıda hata yığını ve kodum da bahsetti.Thread, android 4.0.3 sürümünde hata döndürüyor

Hata 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) 

Kod: Eğer istisna alıyorsanız nedenidir

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

cevap

3

Herkes çoktan istisna (Thread.stop()) nereden geldiğini söyledi, o yüzden o yalnız bırakacağım ... Bugüne kadar

, en kolay yöntem tüm bu amaçla bir Thread oluşturmaz etmektir; Bir AsyncTask bile bunu yapıyor. Bu, Handler için oluşturuldu (veya CountDownTimer, ancak Handler temiz, 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); 
} 

Handler bile bu kod hemen hemen her durumda çağrılmalıdır sizin için ana iş parçacığı, hakkında işlem çalışacaktır.

HTH

1

Thread.stop kullanımdan kaldırılmıştır yöntemi. Bir uyarı ile daha düşük versiyonlarda çalışacaktır. Konu yerine AsyncTask kullanmayı deneyin. Onlar çok daha güvenli

1

Neden stop() iş parçacığı için gerekeni bilmiyorum, stop() zaten thread_instance.interrupt() kullanabileceğiniz iş parçacığı durdurmak istediğinizi kabul etmiyor. Ama, sadece bu

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

stop() metodu kullanımdan kaldırıldı edilir yapacağız.
Önceki sürümlerde, UnsupportedOperationException artık göz ardı edildi, ancak günlükte görebilirsiniz. Fakat 4.0.3'te, Ölümcül istisna olarak kabul edilir.
Kodunuzdaki çağrıyı durdurmak için() durdurabilirsiniz. Bu gereksizdir.

İlgili konular