android activité de fuite de la fenêtre de com.android.interne.politique.impl.phonewindow$decorview Problème
Je suis en train de travailler avec l'application Android, pour montrer l'erreur de réseau.
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;
}
}
}
mais j'obtiens le message d'erreur comme ci-dessous,
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.<init>(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)
J'ai cherché... mais je n'ai pas une bonne idée d'effacer ce.
Est ce que je veux, lors du chargement de cette page, mise en page doit être ajoutée et de la boîte de dialogue devrait être montré.
Merci de m'aider à effacer cette erreur
Remarque: j'ai essayé aussi
@Override
protected void onResume() {
super.onResume();
runOnUiThread(new Runnable() {
public void run() {
showInfoMessageDialog("Please check your network connection","Network Alert");
}
});
}
- Ce
showInfoMessageDialog
méthode contient? - j'ai édité mon code... s'il vous plaît vérifier
- Double Possible de: stackoverflow.com/questions/2850573/...
- c'est pour afficher la boîte de dialogue en cliquant sur le bouton, mais je me demande de montrer oncreate
- Même cause; le
Dialog
est ajouté dans une fenêtre qui n'existe pas. - Nettoyer votre projet et essayez d'exécuter
- obtenir la même erreur....
- Qu'est-ce que votre nom d'Activité?
- Mon nom d'Activité est NetErrorPage
- Avez-vous essayé de l'activité d'utilisation de méthodes onCreateDialog(int),onPrepareDialog(),showDialog() ou de lancer cela sur un autre appareil?
- Je ne pouvais pas comprendre ce que vous demandez
- L'activité a des méthodes pour créer une boîte de dialogue.Les utiliser pour afficher votre boîte de dialogue d'erreur.
- ce code est sur NetErrorPage.java:114 ?
- Autres que le code ci-dessus, ayant le code de clic du bouton...
- montrez-moi le code ce qui est sur 114 ligne . merci
- juste j'ai commencé ce que l'intention de mon activité principale
- 114 ème ligne est " alertDialog.show();"
- Désolé, je wan pour montrer boîte de dialogue d'alerte lorsque le chargement de la page
- Veuillez vérifier mon code source en entier
- veuillez vérifier ma Note:
Vous devez vous connecter pour publier un commentaire.
Merci les Gars de me donner beaucoup de suggestions. J'ai finalement trouvé une solution. Que j'ai commencé la NetErrorPage intention à deux reprises. Une fois, j'ai vérifié sur le net la disponibilité de la connexion et a commencé à l'intention de la page commencé événement. deuxième temps, si la page a erreur, puis j'ai commencé à l'intention de OnReceivedError événement. La première boîte de dialogue n'est pas fermé, avant que la deuxième boîte de dialogue est appelée. De sorte que je suis une erreur.
Maintenant, j'ai supprimé le deuxième appel et Effacé l'erreur :-).
Modifier cette
dialog.cancel();
àdialog.dismiss();
La solution est d'appeler
dismiss()
sur leDialog
vous avez créé à l' NetErrorPage.java:114 avant de sortir de laActivity
, par exemple, dansonPause()
.Points de vue ont une référence à leur parent
Context
(prises à partir d'argument du constructeur). Si vous laissez unActivity
sans détruireDialog
s et d'autres créés dynamiquementView
s, ils détiennent toujours cette référence à votreActivity
(si vous avez créé avec ce queContext
: commenew ProgressDialog(this)
), de sorte qu'il ne peut pas être recueilli par le GC, provoquant une fuite de mémoire.cancel()
fonction, qu'elle appelle déjàdismiss()
en interne, mais en outre, il permettra également appeler votreDialogInterface.OnCancelListener
(si inscrit). Donc, en donnant la préférence à l'une ou l'autre de ne pas théoriquement faire une différence.Dans mon cas
finish()
exécutée immédiatement après un dialogue a montré.onPause()
?onPause()
vous pouvez l'écrire comme une nouvelle réponse ou ici.Veuillez essayer de cette Façon, Et Laissez-moi savoir :
La boîte de dialogue doit être démarré qu'après les états de la fenêtre de l'Activité sont initialisés
Cela se produit uniquement après onresume.
Donc appel
dans votre OnResume fonction. Ne pas créer des boîtes de dialogue dans OnCreate
Edit:
utiliser cette
dans votre Onresume au lieu de showonuithread
réglage de la valeur null fonctionne pour moi
J'ai eu cette erreur mais il est résolu intéressant. En premier, j'ai eu cette erreur à l'api de niveau 17. Lorsque j'appelle un thread (AsyncTask ou autres), sans boîte de dialogue de progression puis-je appeler une autre méthode de fil à nouveau à l'aide de boîte de dialogue de progression, j'ai eu l'accident et la raison en est à propos de l'utilisation de la boîte de dialogue de progression.
Dans mon cas, il y a deux résultats;
show();
méthode de la boîte de dialogue de progression avant le premier thread démarre puis j'ai prisdismiss();
méthode de la boîte de dialogue de progression de l'avant-dernier thread se termine.Donc :