主线程上的Android IO操作

use*_*123 2 android

我的问题有两个:

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

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

mar*_*inj 7

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

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

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

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

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

  • 加载器 - 应该取代AsyncTask,因为它更容易被活动中的托管组件.它的管理由框架完成.

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

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

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