2016-11-15 5 views
0

Ich habe über Google gesucht, aber alle Antworten, die ich gefunden habe, um mein Problem im Zusammenhang does't ...Wie loswerden "hat Fenster geleckt"?

Es ist mein Fehlerprotokoll

Activity com.fittingroom.newtimezone.view.ActivityAcceptNotAccept has leaked window com.android.internal.policy.PhoneWindow$DecorView{57b68a6 V.ED..... R......D 0,0-324,534} that was originally added here 
                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:565) 
                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:326) 
                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
                     at android.app.Dialog.show(Dialog.java:350) 
                     at com.fittingroom.newtimezone.view.ActivityAcceptNotAccept.openProgress(ActivityAcceptNotAccept.java:125) 
                     at com.fittingroom.newtimezone.presenters.PresenterActivityAcceptNotAccept.openProgress(PresenterActivityAcceptNotAccept.java:125) 
                     at com.fittingroom.newtimezone.presenters.PresenterActivityAcceptNotAccept.access$000(PresenterActivityAcceptNotAccept.java:16) 
                     at com.fittingroom.newtimezone.presenters.PresenterActivityAcceptNotAccept$1.onPreExecute(PresenterActivityAcceptNotAccept.java:35) 
                     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:604) 
                     at android.os.AsyncTask.execute(AsyncTask.java:551) 
                     at com.fittingroom.newtimezone.presenters.PresenterActivityAcceptNotAccept.setCroppedPreviewImage(PresenterActivityAcceptNotAccept.java:51) 
                     at com.fittingroom.newtimezone.view.ActivityAcceptNotAccept.accept(ActivityAcceptNotAccept.java:63) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at android.view.View$DeclaredOnClickListener.onClick(View.java:4735) 
                     at android.view.View.performClick(View.java:5697) 
                     at android.view.View$PerformClick.run(View.java:22526) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:158) 
                     at android.app.ActivityThread.main(ActivityThread.java:7224) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Was ich tue, ich schaffe gerade Fortschritte Dialog und unter controll von assynk Aufgabe und in onPreExecute() Dialog öffnet und damit in onPostExecute() Dialog endet ...

Es ist mein Code

public final class ActivityAcceptNotAccept extends Activity implements IActivityAcceptNotAccept { 

private Dialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_accept_not_accept); 

    .../// 

    presenter.initView(); 


} 

.../// 

@Override 
public void initView() { 
    progressDialog = UtilClass.getDialog(ActivityAcceptNotAccept.this, getString(R.string.loading)); 
} 

public final void accept(View view) { 
    switch (count) { 
     case firstClick: 
      presenter.setCroppedPreviewImage(); 
      break; 
     case secondClick: 
      presenter.setResultOkAndFinishActivity(); 
      break; 
    } 
} 

@Override 
public void setDisplaySize() { 
    UtilClass.setDisplaySize(getWindowManager().getDefaultDisplay(), getWindow(), 95, 95); 
} 

@Override 
public void openProgress() { 
    if (progressDialog != null) { 
     progressDialog.show(); 
    } 
} 

@Override 
public void closeProgress() { 
    if (progressDialog != null) { 
     progressDialog.cancel(); 
     progressDialog = null; 
    } 
} 
} 

Es gibt eine Methode whicth mich Dialog Instanz liefern

public abstract class UtilClass { 

public static Dialog getDialog(Context context, String text) { 
    final Dialog progressDialog = new Dialog(context); 
    progressDialog.setContentView(R.layout.dialog); 
    progressDialog.setCanceledOnTouchOutside(false); 

    final Window window = progressDialog.getWindow(); 
    if (window != null) { 
     window.setBackgroundDrawableResource(android.R.color.transparent); 
    }else { 
     Logger.logError("window == null", new NullPointerException(), context); 
    } 

    final TextView msg = (TextView) progressDialog.findViewById(R.id.id_tv_loadingmsg); 
    msg.setText(text); 

    return progressDialog; 
} 

Wie kann ich verstehen, dass es nichts ist spesial nur Dialog erstellen, es zeigen und es schließlich schließen, dass es ...

Warum erhalte ich dieser Fehler?

Was mache ich falsch?

EDIT

AsynkTask

public void setCroppedPreviewImage() { 
    new AsyncTask<Void, Void, byte[]>() { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      openProgress(); 
     } 

     @Override 
     protected byte[] doInBackground(Void... voids) { 
      final String path = model.getImageFilePath(); 
      final Bitmap croppedBitmap = getCroppedBitmapFromPath(path); 
      return getByteArrayFromBitmap(croppedBitmap); 
     } 

     @Override 
     protected void onPostExecute(byte[] result) { 
      super.onPostExecute(result); 
      closeProgress(); 
      iActivityAcceptNotAccept.setPreviewImage(result); 
     } 
    }.execute(); 
} 
+2

Dieser Fehler tritt auf, wenn die Dialog-Methode zwei Mal aufgerufen wird, bevor die erste beendet wird. – sasikumar

+0

http://stackoverflow.com/questions/12000940/android-activity-has-leaked-window-com-android-internal-policy-impl-phonewindow –

+0

@IntelliJAmiya ja Ich sah diese Antwort, aber es ist unmöglich für mich. .. Ich habe Dialog nur einmal aufgerufen ... Aber trotzdem muss ich überprüfen –

Antwort

0

versuchen

public void closeDialog() { 
    if (progressDialog != null && progressDialog.isShowing()) 
    { 
     progressDialog.dismiss(); 
    } 
} 
public void displayDialog() { 
    if (progressDialog != null && !progressDialog.isShowing()) 
    { 
     progressDialog.show(); 
    } 
} 
+0

veröffentlicht Ich habe dies bereits implementiert ... nichts geändert ... –

1

eigentlich in meinem Fall Grund verwendet wurde nicht in Dialogfenster. Ich habe versucht, den Fortschritt und den wahren Grund zu enthüllen. Es war wegen OOM während Bitmap-Dekodierungsprozess ... Aber ich weiß nicht, warum ich Fehlerprotokoll bekam, das diesen Grund in progress dialog sagte.

Schließlich war mein Bitmap zu groß und ich hatte es ich erreicht auf diese Weise

zu reduzieren (wenn jemand das gleiche Problem haben wird)

final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    final Bitmap bitmap = BitmapFactory.decodeFile(photo.getAbsolutePath(), options); 

Es bedeutet, dass ich Bitmap-Größe in 2 mal reduzieren und jetzt funktioniert App perfekt!

+0

Freut mich zu sehen, Sie beheben das Problem .Move ahead –

Verwandte Themen