2012-01-05 16 views
5

में थ्रेड रिटर्न त्रुटि मेरे पास एक सवाल है कि मेरे एंड्रॉइड ऐप में स्प्लैश स्क्रीन है जिसमें मैं 8 सेकंड के लिए थ्रेड का उपयोग कर रहा हूं, यह 1.6,2.1,2.2,2.3 में ठीक चल रहा है .3, 3.0, 3.1 लेकिन जब मैं एंड्रॉइड के 4.0.3 संस्करण में इसे चलाने के लिए त्रुटि चाहता हूं, तो मुझे त्रुटि मिलती है, मुझे नहीं पता क्यों? कृपया मुझे इसके लिए सही समाधान सुझाएं। नीचे मैंने त्रुटि स्टैक और मेरा कोड भी बताया।एंड्रॉइड 4.0.3 संस्करण

त्रुटि ढेर:

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) 

कोड:

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

उत्तर

3

सब लोग पहले ही कहा है, जहां अपवाद (Thread.stop()) से आ रही है, तो मुझे लगता है कि अकेले छोड़ देंगे ...

अब तक, सबसे आसान तरीका इस उद्देश्य में सभी के लिए एक Thread नहीं बनाने के लिए है; यहां तक ​​कि AsyncTask भी इसे अधिक कर रहा है। यह Handler के लिए बनाया गया था (या यहां तक ​​कि CountDownTimer, लेकिन Handler क्लीनर, आईएमओ है)।

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 भी आपके लिए मुख्य थ्रेड, जहां कि कोड काफी वैसे भी बुलाया जाना चाहिए पर कार्रवाई चलेंगे।

एचटीएच

1

Thread.stop बहिष्कृत है तरीका है जिसके कारण आप अपवाद हो रही है है। यह एक चेतावनी के साथ निचले संस्करणों पर काम करेगा। धागे के बजाय AsyncTask का उपयोग करने का प्रयास करें। वे ज्यादा सुरक्षित

1

मैं तुम क्यों थ्रेड stop() करने की जरूरत है पता नहीं है कर रहे हैं, stop() पहले से ही हटा दिया गया है आप थ्रेड आप thread_instance.interrupt() उपयोग कर सकते हैं बंद करना चाहते हैं। लेकिन, बस यह करेगा,

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() विधि बहिष्कृत है।
पिछले संस्करणों में, UnsupportedOperationException को अभी अनदेखा कर दिया गया था, आप इसे लॉग में देख सकते हैं। लेकिन 4.0.3 में, इसे घातक अपवाद माना जाता है।
आप अपने कोड में रोकने के लिए कॉल को हटा सकते हैं। यह अनावश्यक है।

संबंधित मुद्दे