2011-02-10 12 views
9

मैं चाहता हूं कि एक बटन दबाकर कुछ देरी के साथ एक नई गतिविधि शुरू होनी चाहिए। क्या ऐसा करना संभव है, और प्रक्रिया क्या है।एंड्रॉइड में बटन दबाए जाने के बाद कुछ देरी के साथ एक अलग गतिविधि कैसे शुरू करें?

+0

मन के इस टुकड़े की कोशिश? मैंने देखा कि यह काम के लिए एक पुरानी परियोजना में लिखा गया है, मुझे यकीन नहीं है कि उन्होंने ऐसा क्यों करना चुना। – AdamMc331

उत्तर

10

आप हैंडलर पोस्टडेलेड() विधि का उपयोग करके रननेबल को कॉल कर सकते हैं।

private Handler mHandler = new Handler(); 

... 

OnClickListener mStartListener = new OnClickListener() { 
    public void onClick(View v) { 
      mHandler.postDelayed(mUpdateTimeTask, 100); 
    } 
}; 

private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     // do what you need to do here after the delay 
    } 
}; 

प्रॉप्स यह सही पहली बार प्राप्त करने के लिए @mad रहे हैं:

यहाँ एक उदाहरण (http://developer.android.com/resources/articles/timed-ui-updates.html) है ।

4

आप के postDelayed(Runnable action, long delayMillis) विधि Runnable को Runnable को संदेश कतार में (अनुमानित) देरी के बाद चलाने के लिए उपयोग कर सकते हैं।

+0

यह यूआई थ्रेड को अवरुद्ध किए बिना आपके वांछित व्यवहार की अनुमति देगा। –

28

एक पोस्टडेलेड() कॉल का उपयोग करें जो आपकी गतिविधि को लॉन्च करने योग्य है। एक उदाहरण कोड हो सकता है

//will care for all posts 
    Handler mHandler = new Handler(); 

    //the button's onclick method 
    onClick(...) 
    { 
     mHandler.postDelayed(mLaunchTask,MYDELAYTIME); 
    } 

    //will launch the activity 
    private Runnable mLaunchTask = new Runnable() { 
     public void run() { 
      Intent i = new Intent(getApplicationContext(),MYACTIVITY.CLASS); 
      startActivity(i); 
     } 
    }; 

ध्यान दें कि यह सुविधा देता है इंटरफ़ेस प्रतिक्रियाशील रहते हैं। फिर आपको अपने बटन से ऑनक्लिक श्रोता को हटाने की देखभाल करनी चाहिए।

11

उपयोग इस कोड

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      final Intent mainIntent = new Intent(CurrentActivity.this, SecondActivity.class); 
      LaunchActivity.this.startActivity(mainIntent); 
      LaunchActivity.this.finish(); 
     } 
    }, 4000); 
0

कभी कभी, यू यह करने के लिए जब भी आपके एप्लिकेशन प्रक्रिया या नहीं मारा है की जरूरत है। उस स्थिति में आप अपनी प्रक्रिया के अंदर चलने योग्य या संदेश हैंडलिंग का उपयोग नहीं कर सकते हैं। इस मामले में आप केवल इस पर AlarmManager का उपयोग कर सकते हैं। आशा है कि इस उदाहरण में मदद करता है किसी को भी:

Intent intent = new Intent(); 
... 

PendingIntent pendingIntent = PendingIntent.getActivity(<your context>, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
mgr.set(AlarmManager.RTC, <your delay>, pendingIntent); 
0
runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      new Handler().postDelayed(new Runnable(){ 
       @Override 
       public void run() { 
        Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
        startActivity(intent); 
       } 
      }, 4000); 
     } 
    }); 
0

अगर मैं पूछना तुम क्यों महसूस किया आप देरी की जरूरत कोड

new Timer().schedule(new TimerTask() {   
    @Override 
    public void run() { 

     // run AsyncTask here.  


    } 
}, 3000); 
संबंधित मुद्दे

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