जमीन की सेवा पूरी तरह से कैसे रोकें ..?

हाय दोस्तों, मुझे हल करने में एक समस्या है ... जब मैं गतिविधि से Destroy() विधि को कॉल करता हूं, तो मैं पूरी तरह से सेवा को नष्ट करना चाहता हूं। लेकिन मेरी समस्या यह है कि मैं इसे पूरी तरह से नष्ट करने में असमर्थ हूं .. पृष्ठभूमि में यह चल रहा है, मैं नमूना कोड साझा कर रहा हूं जो मैंने कोशिश की ..

    //Activity Class
    public class ServiceToAct extends Activity {
    private static final String TAG = "BroadcastEvent";
    private Intent intent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        intent = new Intent(this, BroadcastService.class);
        startService(intent);
        registerReceiver(broadcastReceiver, new       IntentFilter(myService.BROADCAST_ACTION));
    }

    /*@Override
    protected void onResume() {
        super.onResume();

    }*/

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(broadcastReceiver);

    }

    @Override
    protected void onDestroy() {

        stopService(intent);

        Toast.makeText(this, "Destroy Completely", Toast.LENGTH_LONG).show();
    }

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

        }
    };
}

// service class
public class myService extends Service {

    private static final String TAG = "BroadcastEvent";
    public static final String BROADCAST_ACTION = "com.service.activity.myService";
    private final Handler handler = new Handler();
    Intent intent;


    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this, "created", Toast.LENGTH_LONG).show();
        intent = new Intent(BROADCAST_ACTION);
    } 

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Toast.makeText(this, "start", Toast.LENGTH_LONG).show();
        handler.removeCallbacks(sendToUI);
        handler.postDelayed(sendToUI, 1000); 
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        stopSelf();
        //stopService(intent);
        Toast.makeText(this, "Destroy", Toast.LENGTH_LONG).show();
    }

    private Runnable sendToUI = new Runnable() {

        @Override
        public void run() {
            myData();
            handler.postDelayed(this, 10000); 
        }
    };

    private void myData() {

        Log.d(TAG, "keep on entering");
        Toast.makeText(this, "Keep on despling in UI", Toast.LENGTH_LONG).show();

        sendBroadcast(intent);
    }
}

यहां वास्तव में मैं सेवा से अपना यूआई अपडेट करना चाहता हूं, मेरा सबकुछ काम कर रहा है, लेकिन अगर मैं सेवा को नष्ट करता हूं तो यह myData() विधि को कॉल करने पर रहता है, और अगर मैं एप्लिकेशन को बंद करता हूं तो मुझे टोस्ट संदेश मिल रहा है। मेरा मुद्दा यह है कि सेवा को समाप्त होने के बाद मैं टोस्ट संदेश नहीं चाहता हूं मैंने stopService (मंशा) विधि का उपयोग किया, जो सेवा को नष्ट कर देता है, लेकिन पृष्ठभूमि विधि myData() कॉलिंग पर जारी है

1
जोड़ा संपादित
विचारों: 1
यदि आप एक सेवा चाहते हैं जिसमें आपकी गतिविधि के लिए इसका जीवन चक्र है, तो आपको इसे शुरू करने के लिए bindService को कॉल करने पर विचार करना चाहिए - startService नहीं। इस तरह सेवा समाप्त हो जाएगा जब अंतिम बाध्य गतिविधि ने unbindService कहा है।
जोड़ा लेखक Jens, स्रोत

3 उत्तर

स्टॉप सेवा के लिए पूरी तरह से इसका उपयोग करें ..

myActivity.java

@Override
    public void onDestroy() {
      stopService(intent); 
        super.onDestroy();
        Toast.makeText(this, "Destroy", Toast.LENGTH_LONG).show();
    }

service.java

@Override
    public void onDestroy()
    {

        stopSelf();
        super.onDestroy();
    }
0
जोड़ा
जहां आपने लिखा था कि कोड किस वर्ग में है?
जोड़ा लेखक Niranj Patel, स्रोत
.... मैंने जांच की लेकिन मुझे परीक्षण के लिए पूरी परियोजना की आवश्यकता है, इसलिए एक चीज हैंडलर के बजाय टाइमरटास्क का उपयोग करें
जोड़ा लेखक Niranj Patel, स्रोत
अपनी दोनों कक्षाओं को पेस्ट करें, मैं जांच करूंगा
जोड़ा लेखक Niranj Patel, स्रोत
मुझे यकीन नहीं है लेकिन इस हैंडलर को कोशिश करें .removeCallbacks (sendToUI);
जोड़ा लेखक Niranj Patel, स्रोत
हो सकता है कि आपका "रननेबल sendToUI" बंद न हो, इसलिए इसे रोकने और जांचने का प्रयास करें
जोड़ा लेखक Niranj Patel, स्रोत
रिज्यूम और चेक की बजाय क्रिएट विधि से सेवा शुरू करने का प्रयास करें
जोड़ा लेखक Niranj Patel, स्रोत
आपको अपने एक्टिव के डस्ट्रॉय विधि पर लिखना है, जिससे आप सेवा शुरू करते हैं
जोड़ा लेखक Niranj Patel, स्रोत
stopSelf() भी काम नहीं कर रहा है
जोड़ा लेखक KKC, स्रोत
मैं ऑन्रेट विधि से सेवा शुरू करता हूं, लेकिन फिर भी एक ही समस्या है
जोड़ा लेखक KKC, स्रोत
या फिर मैंने गतिविधि कक्षा में डेस्ट्रॉय पर लिखा है, आप सही हैं। लेकिन अभी भी यह काम कर रहा है मैंने कोड से ऊपर की कोशिश की है ... फिर भी मुझे myData() से टोस्ट संदेश मिल रहा है (मेरा उपरोक्त कोड देखें)
जोड़ा लेखक KKC, स्रोत
हाँ, मैं भी वही सोच रहा हूं, कोई विचार है कि कैसे रुकें।
जोड़ा लेखक KKC, स्रोत
धन्यवाद कैपड्रॉइड 4 आपकी मदद, मैंने पहले ही कोशिश की है, मेरा कोड देखें, लेकिन काम नहीं कर रहा है, किसी भी अन्य तरीके से।
जोड़ा लेखक KKC, स्रोत
मैंने दोनों बार कक्षा की जांच संपादित की है ... और मुझे बताएं कि कौन सी समस्या है
जोड़ा लेखक KKC, स्रोत
यानी कि मैंने पहले से ही उपयोग किया है .... लेकिन यह सेवा को रोक नहीं रहा है, यह पृष्ठभूमि में चल रहा है
जोड़ा लेखक KKC, स्रोत

यूआई अपडेट करने के बाद stopService() विधि का उपयोग करें

या

गतिविधि में प्रारंभ सेवा का उपयोग करने के बजाय bindService का उपयोग करें। जब गतिविधि नष्ट हो जाती है, तो सेवा भी नष्ट हो जाती है

0
जोड़ा
गतिविधि में प्रारंभ सेवा का उपयोग करने के बजाय bindService का उपयोग करें। जब गतिविधि नष्ट हो जाती है, तो सेवा भी नष्ट हो जाती है
जोड़ा लेखक Raghu Nagaraju, स्रोत

आप बेहतर तरीके सेXxx() को कभी भी कॉल नहीं करेंगे। अपनी गतिविधि में stopService (इरादा i) का उपयोग करें और इसके बजाय रोकने के लिए सेवा में स्वयं() रोकें।

0
जोड़ा
या मैंने गतिविधि में stopService (इरादा) और सेवा में stopSelf() का उपयोग किया लेकिन अब काम कर रहा है
जोड़ा लेखक KKC, स्रोत