लीक मैं खेलने सेवाओं v9.8.0 उपयोग कर रहा हूँ (स्थान सेवा अनुमतियों के बिना) और अभी भी एक रिसाव का सामना करना पड़ रहा है जब मैं एक संवाद टुकड़ा में एक MapView
का उपयोग करें। मैं इसे अपने कोड उदाहरण में उपयोग कर रहा हूं और मैं इसे केवल एक स्थान प्रदर्शित करने के लिए उपयोग करता हूं और मेरे पास setMyLocationEnabled
नहीं है (क्योंकि मेरे पास इस सेटिंग के लिए अनुमति भी नहीं है)।MapView (स्थान सेवा के बिना) गतिविधि
क्या कोई मेरे कोड में कोई समस्या देखता है? मुझे यहां एक रिसाव मिल रहा है: MapView v2 keeping Context around। मैं निम्नलिखित है:
- एक संवाद
- बनाने (एक
MapView
के साथ अपने लेआउट में एक दृश्य की जगह क्योंकि मैं, साथ ही स्थिर नक्शे का उपयोग करें ताकि मेरे डिफ़ॉल्ट दृश्य मेरी लेआउट में एकImageView
है की अनुमति देते हैं, कि हो जाएगा एकMapView
)
के साथ बदल दिया तो फिर ऐसा होता है मेरी टुकड़े लीक कि MapView.mContext
...
कोड - संवाद टुकड़ा
public class DialogMediaDetails extends DialogFragment
{
private GoogleMap mGoogleMap = null;
private MapView mMapView = null;
@Override
public final Dialog onCreateDialog(Bundle savedInstanceState)
{
Dialog dlg = ...; // create dialog
View view = ...; // get view from dialog
Location location = ...; // defined location
initGoogleMap();
return dlg;
}
private void initGoogleMap(Location location)
{
mMapView = new MapView(getActivity());
MapsInitializer.initialize(getActivity());
// Updates the location and zoom of the MapView
mMapView.onCreate(null);
mMapView.getMapAsync(new OnMapReadyCallback()
{
@Override
public void onMapReady(GoogleMap googleMap)
{
LatLng coordinates = new LatLng(location.getLatitude(), location.getLongitude());
googleMap.addMarker(new MarkerOptions().position(coordinates));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15));
mGoogleMap = googleMap;
mMapView.onResume();
}
});
mMapView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
mMapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// MapView is scrollable, so we disable dragging
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
@Override
public boolean canDrag(AppBarLayout appBarLayout) {
return false;
}
});
}
});
replaceHeader(mMapView);
}
private void replaceHeader(View view)
{
ViewGroup parent = (ViewGroup) pbHeader.getParent();
int index = parent.indexOfChild(pbHeader);
ViewGroup.LayoutParams lp = pbHeader.getLayoutParams();
parent.removeView(pbHeader);
parent.addView(view, index, lp);
}
// ----------------------------------------
// forward all lifecycle events to MapView
// ----------------------------------------
@Override
public void onResume() {
super.onResume();
if (mMapView != null)
mMapView.onResume();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mMapView != null)
mMapView.onSaveInstanceState(outState);
}
@Override
public void onPause() {
super.onPause();
if (mMapView != null)
mMapView.onPause();
}
@Override
public void onLowMemory() {
super.onLowMemory();
if (mMapView != null)
mMapView.onLowMemory();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mMapView != null)
mMapView.onDestroy();
mMapView = null;
}
}
क्या आपने रिसाव शुरू करने के लिए लीक कैनरी का उपयोग करने का प्रयास किया है? – jakubbialkowski
हां। लिंक के रूप में मुझे रिसाव श्रृंखला मिलती है जैसे "... माता-पिता संदर्भ फ़्रेमलेआउट। मानसिक संदर्भ MapView.mContext" ... – prom85
क्या आपको पता चला? – Laurent