【问题标题】:AsyncTask stops after onPreExecute, after several runsAsyncTask 在 onPreExecute 之后停止,经过几次运行
【发布时间】:2012-10-11 22:01:20
【问题描述】:

我的程序中有一个AsyncTask,在应用程序运行多次后,它似乎在onPreExecute() 之后停止。我的意思是,我可以使用该应用程序并且一切正常运行大约 10-20 次,但随后它停止了。这是发生了什么:

private class MyTask extends AsyncTask<String, Void, Data> {

    protected void onPreExecute() {
        // show loading dialog
        Log.d(TAG, "end onPreExecute");
    }

    protected Data doInBackground(String... params) {
        Log.d(TAG, "start doInBackground");
        // do stuff
    }

    protected void onPostExecute(Data myData) {
        // do stuff
    }

}

当它停止工作时,加载对话框会一直加载,"end onPreExecute" 会打印,但 "start doInBackground" 不会。

为什么会这样?

【问题讨论】:

  • 您是否在“onPostExecute”中关闭对话框?
  • LogCat 上没有可以附加到您的问题的内容?也许这可能是 OutOfMemory 的问题,因为您运行了很多次......如果没有更多信息,就不可能为您提供帮助。 []s 网络
  • 您在 PreExecute 中执行的其他操作是否会停止?连接到服务,或加载一些东西?
  • @NetoMarin 不,除了我在 Log.d() 中写的内容之外,logcat 不显示任何内容
  • @Alexander.S 不,加载对话框是我在 onPreExecute 中唯一要做的事情

标签: android multithreading asynchronous android-asynctask


【解决方案1】:

很难说问题出在哪里。由于您的 Async 任务似乎在前几次都可以正常工作,这可能是因为这个 API 功能太过分了"unstable" for your intention...

您的问题的解决方案可能只是用不同的线程解决方案替换 AsyncTask:

希望有帮助!

【讨论】:

  • 这很有帮助,谢谢!我没有意识到 AsyncTask 并不适合所有情况。我正在尝试使用传统的线程替代方案;但是你知道我怎么还能用它来做“preExecute”和“postExecute”吗?
  • 尝试使用回调。在 UI 线程上运行的方法中,可以在线程的开头、中间和结尾调用。因此,您的回调对象可以使用“preExecute”、“progressUpdate”和“postExecute”等方法实现接口,您可以在其中传递一些参数并定义您想要在 UIThread 上执行的操作...stackoverflow.com/questions/3398363/…saigeethamn.blogspot.com/2010/04/…
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多