Android活动已泄露窗口

Android活动已泄露窗口,android,Android,我试图做的是从服务器获取文件。同样的代码使用sdcard运行f9,但当我从thorugh线程获取文件时,我的logcat中出现以下错误 我的代码如下: public class Map extends Activity { // private GraphicsView mGLView; //private GisGLRenderer m_GisRenderer; final static String RESULT_KEY="result"; fina

我试图做的是从服务器获取文件。同样的代码使用sdcard运行f9,但当我从thorugh线程获取文件时,我的logcat中出现以下错误

我的代码如下:

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)
公共类映射扩展活动
{
//
私有图形视图mGLView;
//私人GISGLER m_GISGLER;
最终静态字符串结果\u KEY=“RESULT”;
最终静态int REQ_代码=1001;
AlertDialog m=null;
公共类装入文件扩展异步任务
{
ProgressDialog Asycdialog=新建ProgressDialog(Map.this);
@凌驾
受保护的void onPreExecute(){
//设置对话框的消息
setMessage(“加载文件”);
Asycdialog.setButton(DialogInterface.BUTTON_否定,“取消”,新建DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
//要更改已实现方法的主体,请使用文件|设置|文件模板。
}
});
//显示对话框
Asycdialog.show();
super.onPreExecute();
}
受保护的void onProgressUpdate(字符串…进度)
{
}
受保护的字符串doInBackground(字符串…参数)
{
Map.this.mGLView.LoadProjectFile(AppFuncs.g_路径);
Map.this.mGLView.requestRender();
返回null;
}
受保护的void onPostExecute(字符串结果)
{
Asycdialog.disclose();
super.onPostExecute(结果);
}
}
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
mGLView=(GraphicsView)findviewbyd(R.id.glview);
}
公共无效bt_打开(视图五)
{
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setTitle(“加载文件”);
setMessage(“选择加载文件的选项”)
.setCancelable(错误)
.setNegativeButton(“服务器”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which)
{
意图i=新意图(Map.this,serv.class);
startActivityForResult(i,请求代码);
}
}
)
.setPositiveButton(“SDcard”,新的DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog,int which)
{
Intent i=新Intent(Map.this、FileChooser.class);
startActivityForResult(i,请求代码);
}
}
);
最终警报对话框a=builder.create();
a、 show();
}
受保护的void onActivityResult(int请求代码、int结果代码、意图数据)
{
//super.onActivityResult(请求代码、结果代码、数据);
if(请求代码==请求代码)
{
if(resultCode==RESULT\u OK&&data.getExtras().containsKey(RESULT\u KEY))
{
//Toast.makeText(this,data.getExtras().getString(RESULT_KEY),Toast.LENGTH_SHORT.show();
//this.mGLView.m_SelectedProjectPath=AppFuncs.path;
LoadFile f=新的LoadFile();
f、 执行(“”);
//这个.mGLView.LoadProjectFile(AppFuncs.path);
}
}
}
错误/WindowManager(20040):活动idtech.ESDN.Map泄漏了window com.android.internal.policy.impl.PhoneWindow$DecorView@416a97b0原来是加在这里的
android.view.WindowLeaked:Activity idtech.ESDN.Map泄漏了window com.android.internal.policy.impl.PhoneWindow$DecorView@416a97b0原来是加在这里的
在android.view.ViewRootImpl。(ViewRootImpl.java:380)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
在
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.onPreExecute(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.Invokenactive(本机方法)
位于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(本机方法)

在显示
对话框之前,检查
活动是否未完成
,否则可能会泄漏:

    if(!this.isFinishing()){
        dialog.show();
    }
同时尝试将此声明移动到
活动
,而不是
异步任务
,并尝试取消活动的
onDestroy中的
对话框

    ProgressDialog Asycdialog = new ProgressDialog(Map.this);

发生这种情况的原因是:

退出活动后,您试图显示一个
对话框

解决方案:<