如何在Android中将资产复制到缓存?

时间:2017-08-07 16:01:40

标签: android caching assets

我需要将所有文件从assets文件夹复制到android缓存,以便更快地加载这些数据。主要原因是在应用程序启动期间加载一次。在整个应用程序生命周期中,我可以从缓存中访问所需的文件,这可能会更快。我在互联网上搜索但没有发现任何东西。怎么做?

1 个答案:

答案 0 :(得分:3)

通过在某些Context上调用IntentService来获取一个Android“缓存目录”,例如JobIntentServiceService。将一堆内容从资产复制到文件系统上的文件中需要一些时间,因此具有后台线程的InputStream可能是合适的。进行实际复制是一个问题:

  • AssetManager
  • 获取所需资产的FileOutputStream
  • 获取您要将内容写入的位置getCacheDir(),例如getCacheDir()
  • 中的文件
  • 使用标准Java I / O复制字节

然而,请理解“缓存”不是一些神奇的小精灵粉尘,你在应用程序上传播,以使其更快。例如,getFilesDir()并不比getExternalCacheDir()getExtenalFilesDir()Log快,因为它们都指向相同的硬件(在大多数设备上)。文件系统上的文件可以比资产更快地访问,因为资产存储在APK中,需要一些工作才能从APK中读取它们。所以,这可能会有所帮助。

但是,由于您尚未使用方法跟踪或import React, { Component } from 'react'; class App extends Component { render () { return ( <div className="app"> <h2>Welcome to React</h2> </div> ) } } export default App; 语句或任何内容来确定您的时间花在哪里,因此完全有可能您将完成这项工作并且不会获得任何净改进。例如,my main book作为APK以及其他格式发布。这本书有200多个章节,全部以HTML格式存储在资产中。我没有发现加载HTML特别慢。由于您在这些页面中所做的事情的性质,使用文件而不是资产可能会对您有所帮助,但这可能对您有所帮助。

但您的性能问题也可能来自:

  • JavaScript做太多工作
  • 忘记你有一堆你从网络上下载的东西,因为它们的URL被埋在某处(例如,CSS文件中引用的图像),这些图像下载需要一段时间
  • 您在应用中正在做的其他事情,同时您正在尝试加载此Web内容,因此您正在重载设备的CPU
  • 等等