活动泄漏了窗口decorview@92f9f38 [],最初在此处添加了错误



我在Google Maps中编写了一个代码,该代码靠近hospitalsrestaurantsschools。我正在使用这些依据:implementation 'com.google.android.gms:play-services-maps:15.0.0'implementation 'com.google.android.gms:play-services-location:15.0.0'。我正在使用Gradle 3.0.0。当我运行代码时,我会收到此错误:

Activity has leaked window DecorView@92f9f38[] that was originally added here
   at android.view.ViewRootImpl.<init>(ViewRootImpl.java:417)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
   at android.app.Dialog.show(Dialog.java:316)
   at com.dell.spacestemp.ui.Activities.NearByActivity.CheckGooglePlayServices(NearByActivity.java:81)
   at com.dell.spacestemp.ui.Activities.NearByActivity.onCreate(NearByActivity.java:61)
   at android.app.Activity.performCreate(Activity.java:6662)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  

此错误在此代码块中发生:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkLocationPermission();
        }
        //Check if Google Play Services Available or not
        if (!CheckGooglePlayServices()) {
            Log.d("onCreate", "Finishing test case since Google Play Services are not available");
            finish();
        }
        else {
            Log.d("onCreate","Google Play Services available.");
        }
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

private boolean CheckGooglePlayServices() {
        GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
        int result = googleAPI.isGooglePlayServicesAvailable(this);
        if(result != ConnectionResult.SUCCESS) {
            if(googleAPI.isUserResolvableError(result)) {
                googleAPI.getErrorDialog(this, result,
                        0).show();
            }
            return false;
        }
        return true;
    }  

我该如何修复?是什么原因造成的?为什么会发生?

将片段交易代码放在

的其他部分
if (!CheckGooglePlayServices()) {
 ......
}
else {
    Log.d("onCreate","Google Play Services available.");
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

或者您可以尝试;

if(!((Activity)YourActivity.this).isFinishing()) {
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
     mapFragment.getMapAsync(this);
}

下面提到的代码使用分离的线程进行执行。

  int result = googleAPI.isGooglePlayServicesAvailable(this);

这是因为您的活动在片段交易中完成!

我认为您的代码在破坏活动后试图获取上下文

最新更新