主线程上的Android IO操作

时间:2015-08-03 19:05:17

标签: android

我的问题有两个:

  1. 在Android中的主线程上进行IO操作是否可取或者是否有可能导致我的应用程序崩溃。

  2. 如果在主线程上执行IO操作不理想,我可以使用哪些其他框架,以便在我的应用程序加载时可以执行一些基本的IO文件读取,并可以将值存储在变量中。

2 个答案:

答案 0 :(得分:7)

  

在Android中的主线程上进行IO操作是否可取或者是否有可能导致我的应用程序崩溃。

documentation中所述,这是不可取的。您可能会遇到糟糕的用户体验。 UI线程(~5s)上的较长操作将导致ANR(应用程序无响应)对话框 - 这会导致应用程序崩溃。此外,网络通信等IO操作也会导致API抛出即时异常。

  

如果在主线程上执行IO操作不理想,我可以使用哪些其他框架,以便在我的应用程序加载时可以执行一些基本的IO文件读取,并可以将值存储在变量中。

很多,对于基本IO文件读取,您可以使用AsyncTask:

  • AsyncTask - 用于简短操作 - 比如读取文件+解析它。你必须自己管理它的生命时间 - 即。如果在活动中使用,它会因配置更改而被破坏。

  • Loaders - 应该将AsyncTask替换为活动中更容易被管理的组件。它的管理由框架完成。

  • Executor - 这是在线程池上执行代码的java类。你必须自己管理它的生命。 IE浏览器。当配置更改活动时。

  • Services它不会创建自己的线程,但允许您在后台执行长时间的操作。

  • IntentService - 创建自己的线程并在队列中处理任务的服务

答案 1 :(得分:0)

IO操作永远不可取,因为它需要一些时间来获取文件等。

IO操作应该使用单独的线程完成,而AsyncTask可以帮助您完成