la actividad de Android se ha filtrado ventana com.android.internal.policy.impl.phonewindow $ decorview Problema

Estoy trabajando con la aplicación de Android para mostrar un error de red.

NetErrorPage.java

package exp.app; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class NetErrorPage extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.neterrorlayout); Button reload=(Button)findViewById(R.id.btnReload); reload.setOnClickListener(this); showInfoMessageDialog("Please check your network connection","Network Alert"); } public void onClick(View arg0) { if(isNetworkAvailable()) { Intent myIntent = new Intent((Activity)NetErrorPage.this, MainActivity.class); myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); ((Activity)NetErrorPage.this).startActivity(myIntent); finish(); } else showInfoMessageDialog("Please check your network connection","Network Alert"); } public void showInfoMessageDialog(String message,String title) { AlertDialog alertDialog = new AlertDialog.Builder(NetErrorPage.this).create(); alertDialog.setTitle("Network Alert"); alertDialog.setMessage(message); alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.cancel(); } }); alertDialog.show(); } private boolean isNetworkAvailable() { NetworkInfo ActiveNetwork; @SuppressWarnings("unused") String IsNetworkConnected; @SuppressWarnings("unused") String ConnectionType; ConnectivityManager connectivitymanager; connectivitymanager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); try { ActiveNetwork=connectivitymanager.getActiveNetworkInfo(); ConnectionType=ActiveNetwork.getTypeName(); IsNetworkConnected=String.valueOf(ActiveNetwork.getState()); return true; } catch(Exception error) { return false; } } } 

pero obtengo el error como a continuación,

 08-17 11:59:08.019: E/WindowManager(16460): Activity exp.app.NetErrorPage has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40534a18 that was originally added here 08-17 11:59:08.019: E/WindowManager(16460): android.view.WindowLeaked: Activity exp.app.NetErrorPage has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40534a18 that was originally added here 08-17 11:59:08.019: E/WindowManager(16460): at android.view.ViewRoot.(ViewRoot.java:263) 08-17 11:59:08.019: E/WindowManager(16460): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 08-17 11:59:08.019: E/WindowManager(16460): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 08-17 11:59:08.019: E/WindowManager(16460): at android.view.Window$LocalWindowManager.addView(Window.java:424) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.Dialog.show(Dialog.java:241) 08-17 11:59:08.019: E/WindowManager(16460): at sync.directtrac.NetError.showInfoMessageDialog(NetErrorPage.java:114) 08-17 11:59:08.019: E/WindowManager(16460): at sync.directtrac.NetError.onCreate(NetErrorPage.java:26) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 08-17 11:59:08.019: E/WindowManager(16460): at android.os.Handler.dispatchMessage(Handler.java:99) 08-17 11:59:08.019: E/WindowManager(16460): at android.os.Looper.loop(Looper.java:130) 08-17 11:59:08.019: E/WindowManager(16460): at android.app.ActivityThread.main(ActivityThread.java:3687) 08-17 11:59:08.019: E/WindowManager(16460): at java.lang.reflect.Method.invokeNative(Native Method) 08-17 11:59:08.019: E/WindowManager(16460): at java.lang.reflect.Method.invoke(Method.java:507) 08-17 11:59:08.019: E/WindowManager(16460): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 08-17 11:59:08.019: E/WindowManager(16460): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 08-17 11:59:08.019: E/WindowManager(16460): at dalvik.system.NativeStart.main(Native Method) 

He buscado más … pero no tengo una idea correcta para aclarar esto.

Lo que quiero es que al cargar esta página, se debe agregar el diseño y se debe mostrar el diálogo.

Por favor, ayúdame a borrar este error

Nota: lo he intentado también

 @Override protected void onResume() { super.onResume(); runOnUiThread(new Runnable() { public void run() { showInfoMessageDialog("Please check your network connection","Network Alert"); } }); } 

Gracias chicos para darme muchas sugerencias . Finalmente obtuve una solución. Es decir, he iniciado el bash de NetErrorPage dos veces. Una vez, he comprobado la disponibilidad de la conexión de red y comencé la intención en el evento de inicio de página. Por segunda vez, si la página tiene un error, entonces he iniciado la intención en el evento OnReceivedError. Entonces, el primer diálogo de tiempo no está cerrado, antes de eso se llama al segundo diálogo. Entonces, tengo un error.

Motivo del error : He llamado al método showInfoMessageDialog dos veces antes de cerrar el primero.

Ahora eliminé la segunda llamada y borré el error :-).

Cambie este dialog.cancel(); a dialog.dismiss();

La solución es llamar a onPause() en el onPause() Dialog que creó en NetErrorPage.java:114 antes de salir de la Activity , por ejemplo en onPause() .

Las vistas tienen una referencia a su Context padre (tomado del argumento del constructor). Si deja una Activity sin destruir Dialog u otras View creadas dinámicamente, aún conservan esta referencia a su Activity (si creó con esto como Context : como new ProgressDialog(this) Dialog new ProgressDialog(this) ), por lo que no puede ser recostackda por el GC, causando una pérdida de memoria

En mi caso, finish () se ejecutó inmediatamente después de que se muestra un cuadro de diálogo.

Por favor, intente de esta manera y hágamelo saber:

 Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.neterrorlayout); mContext=NetErrorPage.this; Button reload=(Button)findViewById(R.id.btnReload); reload.setOnClickListener(this); showInfoMessageDialog("Please check your network connection","Network Alert"); } public void showInfoMessageDialog(String message,String title) { new AlertDialog.Builder(mContext) .setTitle("Network Alert"); .setMessage(message); .setButton("OK",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { dialog.cancel(); } }) .show(); } 

El cuadro de diálogo debe iniciarse solo después de que se hayan inicializado los estados de la ventana de la Actividad. Esto ocurre solo después de hacerlo.

Entonces llama

 runOnUIthread(new Runnable(){ showInfoMessageDialog("Please check your network connection","Network Alert"); }); 

en su función OnResume. No crear diálogos en OnCreate
Editar:

utilizar esta

 Handler h = new Handler(); h.postDelayed(new Runnable(){ showInfoMessageDialog("Please check your network connection","Network Alert"); },500); 

en su Onresume en lugar de showonuithread

  @Override protected void onPostExecute(final Boolean success) { mProgressDialog.dismiss(); mProgressDialog = null; 

establecer el valor null funciona para mí

Recibí este error pero se resolvió interesante. Como primero, obtuve este error en el nivel 17 de la API. Cuando llamo a un hilo (AsyncTask u otros) sin diálogo de progreso, vuelvo a llamar a otro método de hebra usando el diálogo de progreso, obtuve esa falla y el motivo es sobre el uso del diálogo de progreso .

En mi caso, hay dos resultados que;

  • Tomé show(); método de diálogo de progreso antes de que se inicie el primer subproceso, luego tomé dismiss(); método de diálogo de progreso antes de que finalice el último hilo.

Asi que :

 ProgresDialog progressDialog = new ... //configure progressDialog progressDialog.show(); start firstThread { ... } ... start lastThread { ... } //be sure to finish threads progressDialog.dismiss(); 
  • Esto es muy extraño, pero ese error tiene la capacidad de autodestruirse, al menos para mí 🙂