当AsyncTask使用窗口小部件时,活动将关闭

时间:2011-08-26 12:01:00

标签: android android-asynctask

我有一个启动AsyncTask的Activity。此AsyncTask在onPostExecute中使用AutoCompleteTextView.showDropDown()。问题是当AsyncTask运行时,我按“Back”并且应用程序在showDropDown()行抛出异常,因为AsyncTask仍在使用AutoCompleteTextView。如何解决这个问题? (最好的方式)

更新:我对sonykuba的解决方案仍然不满意。使用非最终静态变量时,这不是一个好习惯。我想将AsyncTask与Activity分离,但无法想出更好的解决方案。

更新:添加例外

09-05 13:41:05.536: ERROR/AndroidRuntime(962): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.ViewRoot.setView(ViewRoot.java:505)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.widget.PopupWindow.invokePopup(PopupWindow.java:828)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:740)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1207)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at com.megadict.business.recommending.RecommendTaskInitializer$2.onPostExecute(RecommendTaskInitializer.java:58)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at com.megadict.business.recommending.AbstractRecommendTask.onPostExecute(AbstractRecommendTask.java:29)
09-05 13:41:05.536: ERROR/AndroidRuntime(962):     at com.megadict.business.recommending.RecommendTask.onPostExecute(RecommendTask.java:37)

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用某种静态布尔值,并在onPause of Activity类中将onResume和FALSE设置为TRUE。然后将if语句放在onPostExecute中。

答案 1 :(得分:0)

我有一个解决方案。 AsyncTask的所有者有一个功能:

public void setSearchBar(final AutoCompleteTextView searchBar) {
    this.searchBar = searchBar;
}
  • 当我需要使用它时,我会检查它是否为空。如果没有,请调用showDropDown()。

  • 当Activity破坏时,我将其设置为null。

  

owner.setSearchBar(空);