2015-08-18 13 views
15

Durante l'esecuzione si verifica un errore di perdita della finestra a causa dell'utilizzo di AlertDialog.L'attività ha perso la finestra all'avviso. Il metodo show()

mi hanno fatto notare la linea di errore nel codice qui sotto:

Stacktrace:

08-18 02:48:04.489 28893-28893/? E/WindowManager﹕ Activity com.ms.ha.fragment.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52e58540 V.E..... R.....ID 0,0-1026,585} that was originally added here 
    android.view.WindowLeaked: Activity com.ms.ha.fragment.FirstActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{52e58540 V.E..... R.....ID 0,0-1026,585} that was originally added here 
      at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345) 
      at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239) 
      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
      at android.app.Dialog.show(Dialog.java:281) 
      at com.ms.ha.fragment.TourGuideLoadURLFragment$WebAppInterface.moveToNextScreen(TourGuideLoadURLFragment.java:116) 
      at android.webkit.WebViewCore.nativeMouseClick(Native Method) 
      at android.webkit.WebViewCore.nativeMouseClick(Native Method) 
      at android.webkit.WebViewCore.access$6800(WebViewCore.java:59) 
      at android.webkit.WebViewCore$EventHub.dispatchWebKitEvent(WebViewCore.java:1793) 
      at android.webkit.WebViewInputDispatcher.dispatchWebKitEvent(WebViewInputDispatcher.java:689) 
      at android.webkit.WebViewInputDispatcher.dispatchWebKitEvents(WebViewInputDispatcher.java:639) 
      at android.webkit.WebViewInputDispatcher.access$800(WebViewInputDispatcher.java:78) 
      at android.webkit.WebViewInputDispatcher$WebKitHandler.handleMessage(WebViewInputDispatcher.java:1153) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:814) 
      at java.lang.Thread.run(Thread.java:841) 

FirstActivity.java:

public class FirstActivity extends FragmentActivity implements View.OnClickListener{ 

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

    webView.addJavascriptInterface(new WebAppInterface(this), "Android"); 

} 


    public class WebAppInterface { 
     Context mContext; 

     /** 
     * Instantiate the interface and set the context 
     */ 
     WebAppInterface(Context c) { 
      mContext = c; 
     } 

     /** 
     * Intent - Move to next screen 
     */ 

     @JavascriptInterface 
     public void moveToNextScreen() { 
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        context); 

      // set title 
      alertDialogBuilder.setTitle("Your Title"); 

      // set dialog message 
      alertDialogBuilder 
        .setMessage("Click yes!") 
        .setCancelable(false) 
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 

          Intent i = new Intent(FirstActivity.this,SecondActivity.class); 
          startActivity(i); 
         } 
        }) 
        .setNegativeButton("No", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          // if this button is clicked, just close 
          // the dialog box and do nothing 
          dialog.cancel(); 
         } 
        }); 

      // create alert dialog 
      AlertDialog alertDialog = alertDialogBuilder.create(); 

      // show it 
      alertDialog.show(); --->leak window error 

     } 

    } 

    } 

Io non so come per risolvere questo problema.

+1

http://stackoverflow.com/questions/2850573/activity-has-leaked-window-that -stato originariamente aggiunto Dai un'occhiata a questo. – Beena

+0

Si verifica quando si tenta di mostrare/ignorare un ALertDialog creato e visualizzato in un'attività e di chiuderlo in un'altra attività. –

risposta

32

Si verifica un errore perché ProgressDialog è in esecuzione mentre il Activity viene distrutto. È necessario chiudere la finestra di dialogo prima di iniziare il nuovo Activity.

.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     if (alertDialog != null && alertDialog.isShowing()) { 
      alertDialog.dismiss(); 
     } 
     Intent i = new Intent(FirstActivity.this, SecondActivity.class); 
     startActivity(i); 
    } 
}); 

Spero che sia d'aiuto!

+0

si è verificato ancora l'errore – Steve

+0

Prova codice che ho modificato nella risposta. chiudere la finestra di dialogo o terminare l'attività quando inizia la nuova attività – Rajesh

+0

ha funzionato bene. Grazie – Steve

2

È necessario chiudere/chiudere la finestra di dialogo una volta terminata l'attività. Solitamente si verifica se le finestre di dialogo non vengono ignorate prima che l'attività sia terminata.

7

Ignora il messaggio di avviso nel metodo onPause(). Chiamare alertDialog.dismiss()

Nota: in genere si verificano eccezioni WindowLeaked se le finestre di dialogo non vengono ignorate prima che l'attività sia terminata.

-6

Non so, questo mi aiuta, ma a causa di me il problema stava causando il multidex. A build.gradle

multiDexEnabled false 
+1

No, multidex applicano Indifferente Qui! = 0 – Jorgesys

-5

loro arrivo in manifeste le autorizzazioni di Internet se si dispone incastonati:

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