2015-11-10 9 views
8

मुझे कभी-कभी मेरी जीसीएम सेवा के साथ कोई समस्या है जो बंद हो जाता है जब मेरे स्मार्टफ़ोन की रैम स्वचालित रूप से साफ़ हो जाती है (यदि आपको अधिक जानकारी चाहिए तो this पढ़ें)।अग्रभूमि में GcmListenerService को कैसे चलाएं

जहां तक ​​मैं समझता हूं कि अगर मैं अपनी सेवा को अग्रभूमि में चलाने के लिए सेट करता हूं तो इसे सिस्टम को रैम से हटाने में मदद करनी चाहिए। Service.classonStartCommand() की विधि आमतौर पर startForeground() विधि चलाने के लिए उपयोग की जाती है।

लेकिन GCM कार्यान्वयन के नवीनतम संस्करण के साथ यह असंभव है के बाद से माता-पिता GCMListenerService.class की onStartCommand() पद्धति के रूप में अंतिम परिभाषित किया गया है और मैं इसे ओवरराइड नहीं कर सकते।

तो मैं अपने जीसीएम रिसीवर को अग्रभूमि में रम में कैसे सेट कर सकता हूं?

यहां जीसीएम के बारे में मेरा स्पष्ट हिस्सा है।

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="my.app.path" >  

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<!-- ... other permissions --> 

<permission 
    android:name="my.app.path.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="my.app.path.permission.C2D_MESSAGE" /> 

<application 
    ...> 
    <!-- ... activites... --> 

    <receiver 
     android:name="com.google.android.gms.gcm.GcmReceiver" 
     android:exported="true" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="my.app.path" /> 
     </intent-filter> 
    </receiver>  

    <service 
     android:name=".MyGcmListener" 
     android:exported="false" 
     android:enabled="true" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     </intent-filter> 
    </service> 

</application> 

</manifest> 

अग्रिम धन्यवाद।

+0

आप [यहां] (http://stackoverflow.com/a/31302248/4186942) पढ़ने की कोशिश कर सकते हैं। या एक संभावित समाधान 'sendOrderedBroadcast' है। इसके बारे में अधिक जानकारी के लिए कृपया [यहां] देखें (http://markhudnall.com/2013/11/13/gcm-foreground-and-background/): http://markhudnall.com/2013/11/13/gcm -foreground और पृष्ठभूमि /। – bjiang

+0

आप कितनी रैम लक्षित कर रहे हैं? –

+0

@ आर्थर थॉम्पसन, क्या आपका मतलब है कि मेरे फोन में कितनी रैम है? ऐप का वर्तमान संस्करण 3.55 एमबी – user2957954

उत्तर

0

यह प्रश्न काफी पुराना है, लेकिन मुझे लगता है कि भावी पाठकों के लाभ के लिए उत्तर देने योग्य है।

जीसीएम (या नया एफसीएम) के साथ जीसीएमएलिस्टनर सेवा को अग्रभूमि में रखने के लिए की आवश्यकता नहीं है।
वास्तव में ऐप को चालू रखने की कोई आवश्यकता नहीं है।

जब सिस्टम द्वारा एक जीसीएम संदेश प्राप्त होता है, तो आपका ऐप शुरू हो जाएगा और प्रासंगिक सेवा (जीसीएम में जीसीएमएलिस्टनर सेवा या एफसीएम में फायरबेस मैसेजिंग सेवा) निष्पादित की जाएगी।

इस पोस्ट द्वारा उठाया गया वास्तविक मुद्दा यह है:
एप्लिकेशन चालू नहीं होने पर जीसीएम संदेश नहीं आ रहे हैं।

यह ज़ियामी की एक विशेष विशेषता के कारण है जो जीसीएम संदेशों को अवरुद्ध करता है।
देखें: सुरक्षा अनुभाग के अंदर ऑटोस्टार्ट श्वेतसूची।
http://en.miui.com/thread-117992-1-1.html

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