10

मैं एक वर्ग के साथ है और इस उदाहरण से लिया निम्न कोड के साथ एक नई परियोजना बनाई है: https://developers.google.com/app-indexing/android/publish#add-app-indexing-api-callsमेमोरी रिसाव एंड्रॉयड स्टूडियो द्वारा पता लगाया

जब मैं डिवाइस कई बार बारी बारी से और फिर पर डंप जावा ढेर क्लिक करें एंड्रॉइड स्टूडियो में और फिर विश्लेषण पर क्लिक करें। मुझे परिणाम मिलेगा कि मेरी मुख्य गतिविधि लीक हो गई है।

कारण मैंने इस उदाहरण प्रोजेक्ट को बनाया है, क्योंकि मेरे पास एक मौजूदा ऐप है जिसमें मेमोरी लीक समस्या है (स्ट्रिक्टोड और एंड्रॉइड स्टूडियो ऐसा कहता है), और मेरा निष्कर्ष यह है कि यह मेरा ऐप इंडेक्स कोड है जो कारण बन रहा है मुसीबत।

क्या यह एंड्रॉइड स्टूडियो में एक बग है या क्या यह वास्तविक स्मृति रिसाव है?

public class MainActivity extends AppCompatActivity { 


private GoogleApiClient mClient; 
private Uri mUrl; 
private String mTitle; 
private String mDescription; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    mUrl = Uri.parse("http://examplepetstore.com/dogs/standard-poodle"); 
    mTitle = "Standard Poodle"; 
    mDescription = "The Standard Poodle stands at least 18 inches at the withers"; 
} 


public Action getAction() { 
    Thing object = new Thing.Builder() 
      .setName(mTitle) 
      .setDescription(mDescription) 
      .setUrl(mUrl) 
      .build(); 

    return new Action.Builder(Action.TYPE_VIEW) 
      .setObject(object) 
      .setActionStatus(Action.STATUS_TYPE_COMPLETED) 
      .build(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    mClient.connect(); 
    AppIndex.AppIndexApi.start(mClient, getAction()); 
} 

@Override 
public void onStop() { 
    AppIndex.AppIndexApi.end(mClient, getAction()); 
    mClient.disconnect(); 
    super.onStop(); 
} 

}

+0

शायद आपको GoogleApiClient.Bilder कोड में खोदना चाहिए, cuz यह आपकी गतिविधि का संदर्भ देता है। मुझे आपके द्वारा पोस्ट किया गया कोई अन्य कोड नहीं मिल रहा है जो रिसाव का कारण बन सकता है। – SamMao

+0

ऑनस्टॉप को ओएस द्वारा नहीं बुलाया जा सकता है, आपको ऑनस पर उपयोग करना चाहिए – greywolf82

उत्तर

18

यह GoogleApiClient.Builder(this), रिसाव का कारण है क्योंकि वर्तमान गतिविधि API ग्राहक द्वारा रखा जा रहा है लगता है। mClient.disconnect() इसे जारी नहीं करेगा। मैंने getApplicationContext() के साथ "यह" को बदलकर इसे अपने लिए हल कर लिया है। जब तक प्रक्रिया रहता है तब तक एप्लिकेशन संदर्भ रहता है।

mClient = new GoogleApiClient.Builder(getApplicationContext()).addApi(AppIndex.API).build(); 
+0

धन्यवाद। यह मेरी याददाश्त रिसाव हल हो गया। –

+0

ग्रेट सॉल्यूशन! क्या GoogleApiClient बग ट्रैकर में कोई बग रिपोर्ट है? –

+0

यह आश्चर्यजनक है कि उनके पास यह बग है, समाधान के लिए धन्यवाद। – meh

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