我的问题有两个:
在Android中的主线程上进行IO操作是否可取或者是否有可能导致我的应用程序崩溃。
如果在主线程上执行IO操作不理想,我可以使用哪些其他框架,以便在我的应用程序加载时可以执行一些基本的IO文件读取,并可以将值存储在变量中。
答案 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可以帮助您完成