मैं हैंडलर के साथ कुछ समस्याओं में फंस गया हूँ। विशेष रूप से, जब मैं क्रमशः अपना डिवाइस लॉक और अनलॉक करता हूं, या जब ऑनपॉज़() और ऑनर्यूम() को कॉल किया जाता है, तो मुझे कॉलबैक को रोकने और फिर से शुरू करने की आवश्यकता होती है। मैंने handler.Post(action) और handler.RemoveCallbacks(action) को OnPause() और OnResume() में रखा है लेकिन वे ठीक से काम नहीं करते हैं। दरअसल, जब मैं बाहर निकलता हूं और अपने आवेदन में फिर से प्रवेश करता हूं, तो ऐसा लगता है कि handler.Post(action) को दो बार कॉल किया जाता है क्योंकि टेक्स्ट व्यू का अपडेट सामान्य से तेज हो जाता है। इसके अलावा, यही बात तब होती है जब मैं डिवाइस को लॉक या अनलॉक करता हूं। मुझे नहीं पता कि मैं इस मुद्दे को कैसे हल कर सकता हूं। यह मेरा कोड है:

 public class MainActivity : Activity
{
    int count = 1;
    TextView text;
    Handler handler;
    myrunnable runnable;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        // Get our button from the layout resource,
        // and attach an event to it
        text = FindViewById<TextView>(Resource.Id.textView1);
        handler = new Handler();
        runnable = new myrunnable(text, handler);

    }

    protected override void OnResume()
    {
        handler.Post(runnable.Run);
        base.OnResume();
    }
    protected override void OnPause()
    {
        handler.RemoveCallbacks(runnable.Run);
        base.OnPause();
    }

}
public class myrunnable : Java.Lang.Object, IRunnable
{

    int i;
    TextView text;
    Handler handler;
    public myrunnable() { }
    public myrunnable(TextView text, Handler handler)
    {
        this.handler = handler;
        this.text = text;
        i = 0;
    }
    public IntPtr Handle
    {
        get
        {
            return (IntPtr) 0;
        }
    }

    public void Dispose()
    {

    }

    public void Run()
    {
        i++;
        text.Text = i.ToString();
        if (i < 100)
            handler.PostDelayed(Run, 1000);
    }
}

पहले ही, आपका बहुत धन्यवाद।

1
gymni f 20 अगस्त 2016, 22:38

1 उत्तर

सबसे बढ़िया उत्तर

मुझे भी यही तकलीफ़ है। हालांकि, समस्या टेक्स्ट व्यू नहीं है, यह है कि जब एप्लिकेशन शुरू होता है और निलंबित गतिविधि फिर से शुरू होने पर भी रेज़्यूम पर कॉल किया जाता है। Id canRun जैसे बूलियन को सेट करने की अनुशंसा करता है कि यदि गलत सेट किया जाता है तो हैंडलर पोस्ट नहीं करेगा। और अगर यह सच है तो हैंडलर अपनी इच्छानुसार पोस्ट और रद्द कर सकता है। मुझे आशा है कि यह मदद करता है और यह रास्ता नहीं है।

1
Kelton_O 20 अगस्त 2016, 22:59
खैर, मैंने इस विधि की कोशिश की और स्क्रीन को लॉक करने और अनलॉक करने की आवश्यकता होने पर ठीक काम करता है लेकिन जब मैं ऑनपॉज () कॉलबैक के बाद फिर से अपना एप्लिकेशन खोलता हूं, तब तक नहीं
 – 
gymni f
20 अगस्त 2016, 23:12
मुझे यकीन नहीं है कि मैं पूरी तरह से अंडरसेंड करता हूं। जब आप स्क्रीन लॉक करते हैं तो आप हैंडलर को रोकना चाहते हैं और जब आप इसे अनलॉक करते हैं तो इसे फिर से शुरू करना चाहते हैं?
 – 
Kelton_O
20 अगस्त 2016, 23:25
हां, या तो यह या बंद हैंडलर जब मैं आवेदन से बाहर जाता हूं और कुछ सेकंड के बाद इसमें फिर से प्रवेश करता हूं (जब ऑनपॉज कहा जाता है क्योंकि मैं किसी अन्य एप्लिकेशन का उपयोग करना चुनता हूं)
 – 
gymni f
20 अगस्त 2016, 23:45
इसलिए, जब मैं उपयोगकर्ता एप्लिकेशन के साथ बातचीत नहीं कर रहा हूं तो मैं हैंडलर को रोकना चाहता हूं (क्योंकि डिवाइस लॉक है या उपयोगकर्ता एक और एप्लिकेशन खोलता है)
 – 
gymni f
20 अगस्त 2016, 23:52
2
मैं हैंडलर को एक बयान के साथ घेरूंगा जैसे कि (कैनरुन) सत्य है तो हैंडलर चलाएगा। यदि यह सत्य नहीं है तो कोड के ऊपर से गुजरें। ऑनक्रिएट और ऑनर्यूम में कैनरन को सही पर सेट करें और फिर ऑनपॉज में वेरिएबल को गलत पर सेट करें।
 – 
Kelton_O
20 अगस्त 2016, 23:56