【问题标题】:Android Async Task or notAndroid 异步任务与否
【发布时间】:2015-09-17 06:54:54
【问题描述】:

在我的 android 应用程序中,我需要执行一些操作,例如在内部存储中创建一些文件并在应用程序启动时从服务器下载一些数据。只有当这些操作完成后,应用程序的其余部分才能正常工作。所以我打算在打开应用时显示一个图像和一个进度条,在完成所有这些操作后,打开一个新的活动。

现在,我知道将可能长时间运行的操作(如下载和文件读/写)放入异步任务是很常见的。但是,在我的情况下,直到这些操作完成后我才能真正继续,所以我需要使用 Async Tasks,还是在这种情况下应用程序阻塞可以?

或者我应该启动一个异步任务然后等待它,使用 get() 方法?

感谢您的建议,我真的很想以正确的方式做到这一点。

【问题讨论】:

  • 当然,使用 AsyncTasks 并将您的代码放在它的“成功”分支中:)
  • 使用volley/retrofit/okhttp 之类的东西进行网络...

标签: android asynchronous android-asynctask


【解决方案1】:

你关心创建一个启动器活动的启动活动。

然后在 splah 中,启动一个用于下载和所有的异步任务,然后在任务完成后,您可以移动到您想要的活动。

您也可以为此使用线程;在这种情况下,您需要使用处理程序或 runOnUIThread 机制来处理任务完成回调。

最好使用异步任务。

【讨论】:

  • 这需要代码示例和相关 API 的进一步文档
  • @Gusdor 为什么会这样? OP只征求意见
【解决方案2】:

需要将其放入异步任务或不同的线程中。主 ui 线程上的 Internet 请求将在最新 (android 4+) 系统上产生致命错误。

显示加载图像或进度对话框总是比显示悬空的白屏更好。

对于所有长阻塞作业,都需要异步。

如果您将初始屏幕作为主要活动,请为您的异步任务添加以下代码:

 private class YourTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         //Do your work here
         //Note that depending on the type of work, you can change the parameters
         //of the async task.
         return count;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         //Put here the code when your job is done, for example:
         //start a new activity (your real main activity).
     }
 }

之后,在您的活动的oncreate 方法中,调用

 new YourTask ().execute(url1, url2, url3);

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2013-08-31
    相关资源
    最近更新 更多