Android的活动已经泄露窗口 [英] Android Activity has leaked window

查看:96
本文介绍了Android的活动已经泄露窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我所试图做的是从服务器获取文件。同样的code运行F9与SD卡,但是当我从thorugh线程获取文件,然后我得到我的logcat中下面的错误。

我的code是如下:

 公共类地图扩展活动
{
   //
    私人GraphicsView mGLView;    //私人GisGLRenderer m_GisRenderer;    最终静态字符串RESULT_KEY =结果;
    最终静态INT REQ_ code = 1001
     AlertDialog M = NULL;    公共类的LoadFile扩展的AsyncTask<字符串,字符串,字符串>
    {
        ProgressDialog Asycdialog =新ProgressDialog(Map.this);
        @覆盖
        在preExecute保护无效(){
            //对话框的设置消息
            Asycdialog.setMessage(加载文件);
            Asycdialog.setButton(DialogInterface.BUTTON_NEGATIVE,取消,新DialogInterface.OnClickListener(){
                @覆盖
                公共无效的onClick(DialogInterface dialogInterface,int i)以{
                    //使用文件来更改的实现的方法体|设置|文件模板。
                }
            });
            //显示对话框
            Asycdialog.show();
            super.on preExecute();
        }        保护无效onProgressUpdate(字符串...进度)
        {        }        保护字符串doInBackground(字符串... PARAMS)
        {
            Map.this.mGLView.LoadProjectFile(AppFuncs.g_path);
            Map.this.mGLView.requestRender();
            返回null;
        }
        保护无效onPostExecute(字符串结果)
        {
            Asycdialog.dismiss();            super.onPostExecute(结果);
           }
    }
    公共无效的onCreate(捆绑savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_map);
        mGLView =(GraphicsView)findViewById(R.id.glview);
    }
  公共无效bt_Open(视图V)
    {        AlertDialog.Builder建设者=新AlertDialog.Builder(本);
        builder.setTitle(加载文件);
        builder.setMessage(选择一个选项以加载文件)
                .setCancelable(假)
                .setNegativeButton(服务器,新DialogInterface.OnClickListener(){
                   公共无效的onClick(DialogInterface对话,诠释其)
                   {
                       意图I =新意图(Map.this,serv.class);
                       startActivityForResult(I,REQ_ code);                   }                }                )
                .setPositiveButton(SD卡,新DialogInterface.OnClickListener()
                {
                    公共无效的onClick(DialogInterface对话,诠释其)
                    {                        意图I =新意图(Map.this,FileChooser.class);
                        startActivityForResult(I,REQ_ code);                    }                }                );        最后AlertDialog一个= builder.create();
        一场表演();}
 保护无效的onActivityResult(INT申请code,INT结果code,意图数据)
    {
        //super.onActivityResult(request$c$c,result$c$c,data);
        如果(要求code == REQ_ code)
        {
            如果(结果code == RESULT_OK&放大器;&安培; data.getExtras()的containsKey(RESULT_KEY))
            {            // Toast.makeText(这一点,data.getExtras()的getString(RESULT_KEY),Toast.LENGTH_SHORT。).show();
           // this.mGLView.m_SelectedProjectPath = AppFuncs.path;                的LoadFile F =新的LoadFile();
                f.execute();
             // this.mGLView.LoadProjectFile(AppFuncs.path);
            }
        }
    }ERROR /窗口管理器(20040):活动idtech.ESDN.Map渗漏,最初这里添加窗口com.android.internal.policy.impl.PhoneWindow$DecorView@416a97b0
        android.view.WindowLeaked:活动idtech.ESDN.Map渗漏,最初这里添加窗口com.android.internal.policy.impl.PhoneWindow$DecorView@416a97b0
        在android.view.ViewRootImpl<&初始化GT;(ViewRootImpl.java:380)
        在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
        在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
        在android.view.WindowManagerImpl $ CompatModeWrapper.addView(WindowManagerImpl.java:149)
        在android.view.Window $ LocalWindowManager.addView(Window.java:547)
        在android.app.Dialog.show(Dialog.java:277)
        在idtech.ESDN.Map $ LoadFile.on preExecute(Map.java:59)
        在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
        在android.os.AsyncTask.execute(AsyncTask.java:534)
        在idtech.ESDN.Map.onActivityResult(Map.java:221)
        在android.app.Activity.dispatchActivityResult(Activity.java:5194)
        在android.app.ActivityThread.deliverResults(ActivityThread.java:3180)
        在android.app.ActivityThread.handleSendResult(ActivityThread.java:3227)
        在android.app.ActivityThread.access $ 1100(ActivityThread.java:137)
        在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1258)
        在android.os.Handler.dispatchMessage(Handler.java:99)
        在android.os.Looper.loop(Looper.java:137)
        在android.app.ActivityThread.main(ActivityThread.java:4838)
        在java.lang.reflect.Method.invokeNative(本机方法)
        在java.lang.reflect.Method.invoke(Method.java:511)
        在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841)
        在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
        在dalvik.system.NativeStart.main(本机方法)


解决方案

原因发生是这样的:

您正试图显示对话框您已经退出了活动后。

解决方案:

要叫辞退()对话框在退出活动<之前创建/ code>,例如:在的onPause()。所有的窗户和放大器;对话应该留下<$​​ C $ C>活动之前关闭

What i am trying to do is to get files from server. The same code is running f9 with sdcard but when i get files from thorugh thread then i am getting following error in my logcat.

My code is as follows:

public class Map extends Activity
{
   //
    private GraphicsView mGLView;

    //private GisGLRenderer m_GisRenderer;

    final static String RESULT_KEY="result";
    final static int REQ_CODE=1001;
     AlertDialog m=null;



    public class LoadFile  extends AsyncTask<String,String,String>
    {
        ProgressDialog Asycdialog = new ProgressDialog(Map.this);


        @Override
        protected void onPreExecute() {
            //set message of the dialog
            Asycdialog.setMessage("Loading File");
            Asycdialog.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel",new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //To change body of implemented methods use File | Settings | File Templates.
                }
            });
            //show dialog
            Asycdialog.show();
            super.onPreExecute();
        }

        protected void onProgressUpdate(String ... progress)
        {

        }

        protected String  doInBackground(String ... Params)
        {
            Map.this.mGLView.LoadProjectFile(AppFuncs.g_path);
            Map.this.mGLView.requestRender();
            return null;
        }
        protected void onPostExecute(String result)
        {
            Asycdialog.dismiss();

            super.onPostExecute(result);
           }
    }




    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        mGLView =  (GraphicsView) findViewById(R.id.glview);


    }
  public void bt_Open(View v)
    {

        AlertDialog.Builder builder=new AlertDialog.Builder(this);
        builder.setTitle("Load File");
        builder.setMessage("Choose an option to load file")
                .setCancelable(false)
                .setNegativeButton("Server",new DialogInterface.OnClickListener(){
                   public void onClick(DialogInterface dialog,int which)
                   {
                       Intent i= new Intent(Map.this,serv.class);
                       startActivityForResult(i,REQ_CODE);

                   }

                }

                )
                .setPositiveButton("SDcard",new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int which)
                    {

                        Intent i= new Intent(Map.this,FileChooser.class);
                        startActivityForResult(i,REQ_CODE);

                    }

                }

                );

        final AlertDialog a=builder.create();
        a.show();

}
 protected void onActivityResult(int requestCode, int resultCode,Intent data)
    {
        //super.onActivityResult(requestCode,resultCode,data);
        if(requestCode==REQ_CODE)
        {
            if(resultCode==RESULT_OK && data.getExtras().containsKey(RESULT_KEY))
            {

            //    Toast.makeText(this,data.getExtras().getString(RESULT_KEY),Toast.LENGTH_SHORT).show();
           //     this.mGLView.m_SelectedProjectPath =  AppFuncs.path;

                LoadFile f= new LoadFile();
                f.execute("");


             //   this.mGLView.LoadProjectFile(AppFuncs.path);
            }
        }
    }







ERROR/WindowManager(20040): Activity idtech.ESDN.Map has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416a97b0 that was originally added here
        android.view.WindowLeaked: Activity idtech.ESDN.Map has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416a97b0 that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:380)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
        at 

android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
        at android.view.Window$LocalWindowManager.addView(Window.java:547)
        at android.app.Dialog.show(Dialog.java:277)
        at idtech.ESDN.Map$LoadFile.onPreExecute(Map.java:59)
        at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
        at android.os.AsyncTask.execute(AsyncTask.java:534)
        at idtech.ESDN.Map.onActivityResult(Map.java:221)
        at android.app.Activity.dispatchActivityResult(Activity.java:5194)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3180)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3227)
        at android.app.ActivityThread.access$1100(ActivityThread.java:137)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4838)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
        at dalvik.system.NativeStart.main(Native Method)

解决方案

Reason for happening this is :

You're trying to show a Dialog after you've exited an Activity.

Solution :

To call dismiss() on the Dialog you created before exiting the Activity, e.g. in onPause(). All windows & dialogs should be closed before leaving an Activity.

这篇关于Android的活动已经泄露窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆