主线程上的Android IO操作

主线程上的Android IO操作,android,Android,我的问题有两个: 在安卓系统的主线程上执行IO操作是可取的还是有可能使我的应用程序崩溃 如果在主线程上执行IO操作并不理想,那么我可以使用哪些其他框架,以便在我的应用程序加载时,它可以执行一些基本IO文件读取并将值存储在变量中 IO操作永远不可取,因为获取文件等可能需要一些时间 IO操作应该使用一个单独的线程来完成,而 在安卓系统的主线程上执行IO操作是可取的还是有可能使我的应用程序崩溃 正如它在报告中所解释的那样,这是不可取的。您可能会获得糟糕的用户体验。在UI线程(~5s)上进行更长时间的操

我的问题有两个:

  • 在安卓系统的主线程上执行IO操作是可取的还是有可能使我的应用程序崩溃

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


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

    IO操作应该使用一个单独的线程来完成,而

    在安卓系统的主线程上执行IO操作是可取的还是有可能使我的应用程序崩溃

    正如它在报告中所解释的那样,这是不可取的。您可能会获得糟糕的用户体验。在UI线程(~5s)上进行更长时间的操作将导致ANR(应用程序无响应)对话框,从而导致应用程序崩溃。此外,网络通信等IO操作将导致API立即引发异常

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

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

    • -对于短操作-如读取文件+解析文件。您必须自己管理它的生命周期-即,如果在活动中使用,它会由于配置更改而被销毁

    • -应将AsyncTask替换为更易于管理的活动内部组件。它的管理是通过框架来完成的

    • -这是在线程池上执行代码的java类。你必须自己管理它的生命周期。例如,在活动中进行配置更改时

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

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


    短IO操作是可以的,在所有调用
    资源
    共享参考
    或甚至简单的
    设置内容视图(R.layout.xxxx)
    执行IO调用之后,读取大文件迟早会导致ANR(应用程序无响应)错误(如果需要5秒以上的时间)但是Android上的很多东西都在幕后使用文件,比如共享首选项、资源、布局。。。如果我使用
    file.exists()
    file.length()?这些对UI线程也不安全吗?如果我使用file.exists()或file.length()会怎么样?