0

У меня есть приложение, которое возвращает результаты поиска. Из списка результатов можно щелкнуть конкретный элемент, после чего появится подробная страница. Я получаю следующую ошибку утечки окна всякий раз, когда я делаю поиск и возвращаю результаты, просматриваю детали конкретного результата, вернусь к списку результатов и затем нажмите другой, чтобы увидеть подробности. Ошибка возникает, когда я нажимаю второй результат и загружается подробная страница.Почему происходит утечка этого окна?

Вот LogCat ошибки:

11-17 21:32:47.876: E/WindowManager(5945): Activity com.tforan.blobtag4.PlaceActivity has leaked window [email protected] that was originally added here 
11-17 21:32:47.876: E/WindowManager(5945): android.view.WindowLeaked: Activity com.tforan.blobtag4.PlaceActivity has leaked window [email protected] that was originally added here 
11-17 21:32:47.876: E/WindowManager(5945): at android.view.ViewRoot.<init>(ViewRoot.java:278) 
11-17 21:32:47.876: E/WindowManager(5945): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
11-17 21:32:47.876: E/WindowManager(5945): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
11-17 21:32:47.876: E/WindowManager(5945): at android.view.Window$LocalWindowManager.addView(Window.java:433) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.Dialog.show(Dialog.java:265) 
11-17 21:32:47.876: E/WindowManager(5945): at com.tforan.blobtag4.PlaceActivity$FactualRetrievalTask.onPreExecute(PlaceActivity.java:703) 
11-17 21:32:47.876: E/WindowManager(5945): at android.os.AsyncTask.execute(AsyncTask.java:391) 
11-17 21:32:47.876: E/WindowManager(5945): at com.tforan.blobtag4.PlaceActivity.factualQuery(PlaceActivity.java:295) 
11-17 21:32:47.876: E/WindowManager(5945): at com.tforan.blobtag4.PlaceActivity.onCreate(PlaceActivity.java:217) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1873) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054) 
11-17 21:32:47.876: E/WindowManager(5945): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-17 21:32:47.876: E/WindowManager(5945): at android.os.Looper.loop(Looper.java:150) 
11-17 21:32:47.876: E/WindowManager(5945): at android.app.ActivityThread.main(ActivityThread.java:4358) 
11-17 21:32:47.876: E/WindowManager(5945): at java.lang.reflect.Method.invokeNative(Native Method) 
11-17 21:32:47.876: E/WindowManager(5945): at java.lang.reflect.Method.invoke(Method.java:507) 
11-17 21:32:47.876: E/WindowManager(5945): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
11-17 21:32:47.876: E/WindowManager(5945): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
11-17 21:32:47.876: E/WindowManager(5945): at dalvik.system.NativeStart.main(Native Method) 

Почему именно это происходит? Что я могу сделать, чтобы избавиться от этой ошибки? Приятно предоставить дополнительный код по мере необходимости. Благодарю.

EDIT - вот код проблемного AsyncTask:

@Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = new ProgressDialog(PlaceActivity.this); 
     dialog.setMessage("Loading..."); 
     dialog.setIndeterminate(true); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setCancelable(true); 
     dialog.show(); 
    } 

    @Override 
    protected RowResponse doInBackground(RowQuery... query) { 
     RowResponse resp = factual.fetchRow("restaurants", id, query[0]); 
     return resp; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
    } 

    @Override 
    protected void onPostExecute(RowResponse resp) { 
     StringBuffer sb = new StringBuffer(); 
     String today = findCurrentDay(currentDay); 
     JSONArray todayHours = null; 
     Log.i("factual response", resp.toString()); 

     for (Map<String, Object> restaurant : resp.getData()) { 

      //..a bunch of JSON parsing.. 

     dialog.dismiss(); 
    } 
+0

см. Это http://stackoverflow.com/questions/2850573/activity-has-leaked-window-that-was-originally-added – Avijit

+0

Обмен кодом будет получить точное место, где проблема –

+0

общий код. см. правки. – user2163853

ответ

0

Я думаю, вы показываете диалог где-то в коде и создать диалог, который вы используете контекст деятельности. утечка окна происходит только потому, что вы завершаете действие, пока отображается диалоговое окно.

Убедитесь, что вы не делаете вышеуказанную вещь, возвращаясь из поиска.

+0

не уверен, почему это происходит, потому что, несмотря на то, что я запускаю asynctask в этой активности, которая имеет progressdialog, я увольняю диалоговое окно после завершения asynctask. – user2163853

+1

Я имею в виду, что ваша деятельность разрушается до того, как отображается диалог или отображается –

+0

Как это могло произойти? – user2163853

Смежные вопросы