2013-01-12 11 views
7

मेरे पास एक गतिविधि है जिसमें टेक्स्टव्यू है, और मैं लगातार पाठ को अपडेट करना चाहता हूं ..एक अनंत लूप में लगातार एक गतिविधि में टेक्स्ट व्यू को कैसे अपडेट करें?

जावा में मैं लूप के दौरान केवल अनंत बना सकता हूं, और बस प्रत्येक पुनरावृत्ति को सेट कर सकता हूं।

लेकिन जब मैं एंड्रॉइड में ऐसा करने की कोशिश करता हूं, तो यह एक ब्लैक स्क्रीन दिखाता है, और गतिविधि को भी लोड नहीं करता है।

मैंने अनंत को onCreate विधि में रखा है, शायद यही कारण है कि यह दुर्घटनाग्रस्त हो .. लेकिन यदि यह है, तो मुझे इसे कहां रखना चाहिए?

+0

आपके पास मुख्य थ्रेड पर कम से कम एक अनंत लूप नहीं होना चाहिए। इसका उद्देश्य क्या है? :-) – ninetwozero

+0

ठीक है, मैं कुछ अनगिनत (या कम से कम लगातार) – aclokay

+0

समान अपडेट करना चाहता हूं: http://stackoverflow.com/questions/11295152/android-running-infinite-loop || http://stackoverflow.com/questions/1099640/main-loop-in-android –

उत्तर

9

उपयोग Handler और जबकि पाश TextView अद्यतन करने के लिए लगातार बजाय एक अलग थ्रेड/runnable:

Handler handler=new Handler(); 
handler.post(new Runnable(){ 
    @Override 
    public void run() { 
     // upadte textView here 
     handler.postDelayed(this,500); // set time here to refresh textView 
    } 
}); 
+2

+1 यह मुख्य थ्रेड को अवरुद्ध करने से बच जाएगा – Joel

+3

यदि आप हैंडलर को संदर्भित करने जा रहे हैं उस बंद होने के हिस्से के रूप में, आपको इसे अंतिम रूप से डिलीयर करने की आवश्यकता है। – MattD

0

मिनिमल काम कर उदाहरणhttps://stackoverflow.com/a/14295193/895245 के आधार पर:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.TextView; 

public class Main extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final int i = 0; 
     final TextView textView = new TextView(this); 
     textView.setText(String.format("%d", i)); 
     setContentView(textView); 
     final Handler handler = new Handler(); 
     class MyRunnable implements Runnable { 
      private Handler handler; 
      private int i; 
      private TextView textView; 
      public MyRunnable(Handler handler, int i, TextView textView) { 
       this.handler = handler; 
       this.i = i; 
       this.textView = textView; 
      } 
      @Override 
      public void run() { 
       this.handler.postDelayed(this, 500); 
       this.i++; 
       this.textView.setText(String.format("%d", i)); 
      } 
     } 
     handler.post(new MyRunnable(handler, i, textView)); 
    } 
} 

आप सिर्फ इस पेस्ट कॉपी कर सकते हैं android create project [...] द्वारा उत्पन्न मुख्य गतिविधि में, और आप अपने ऐप पर एक काउंटर देखेंगे।

एंड्रॉइड 22 पर परीक्षण किया गया।

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